发表于: 2018-06-01 23:31:40

4 623


今天完成的事情:学习js

明天的计划:继续学习js

今天的收获:

局部变量保存在栈里
栈和堆的区别是
栈是系统根据变量大小自动分配空间的
堆是你用new,malloc等手动分配空间的
局部变量保存在栈内存区;
栈内存区的地址是连续的,由系统控制速度较快而
堆内存区的地址是不连续的,它是系统将空闲内存块链接起来的链表,
用户用new/malloc请求分配时,找到第一个满足大小要求的块从链表中删除此节点,
然后分给用户,没有栈内存速度快,但是很灵活。
操作系统给程序运行的内存非了4个区域:
1 代码区:顾名思义就是存放运行的代码的
2 全局数据区: 存放全局数据和静态数据以及常量.
3 栈区 函数调用时的返回地址,参数压栈,局部变量,返回数据等都存放在栈区.
4 堆区,存放程序动态分配的内存(new,malloc等函数分配的)
栈内存是由系统自己分配和释放的,而堆内存要由程序员自己全全控制的,否则会出现内存泄露.




  • return
    • 从当前函数退出,并从该函数返回一个值;
    • return true ;返回正确的处理结果,相当于执行符;
    • return false ,取消默认动作;
    • 规则一:除非另行声明,否则JavaScript中的每个函数都返回undefined;
function test(){};
test();
// undefined
当调用这个函数的时候返回的是undefined;
当特别说明return一个值,现在调用包含了特别声明的函数:
function test(){
  return true;
};
test();
// true
现在返回的值改变了默认值undefined;
  • rule2 : return会结束函数的执行,return属于短路操作,如果有多个return表达式,只要有一个满足了,后面的表达式用于不会执行;
  • rule3:return会返回给函数调用者一个值,可以在函数中插入变量
let double = function(num) {
   return num * 2;
}
let twelve = double(six);
// 12
  • return会立刻结束函数,所以可以也可以用来中断函数
let countTo = function(num){
  if(typeof num != 'number') return false;
  for(var i = 1; i <= num; i++){
    console.log(i);
  }
}
  • 中断循环

工作原理:switch首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的表达式值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
具体执行过程:
//具体的执行,就是这样
//1. 计算switch小括号里面的表达式,得出结果a
//2. 计算case后边的表达式,得出结果b
//3. 进行验证 a === b 如果相等,则执行case,否则跳过这个case,继续2步骤
//4. 强制中断switch语句可以用return , break这俩个关键字在case后边的执行语句里,
//   可以跳出switch的验证
//加上break语句
//这样,只要有一次可以匹配通过,就会跳出其他的判断条件和if else if else 差不多
实例1:
1.
var id = 2;
var s = 1;
switch(id){//计算id的值
    case 2://计算常量
        alert('2 true');
    case 1 + 1://计算数字相加
        alert('1 + 1 true');
    case 1 * 2://计算数字相乘
        alert('1 * 2 true');
    case s * 2://计算变量
        alert('s * 2 true');
    default : //默认执行
        alert('default');
}
2.
switch(id){//计算id的值
    case 2://计算常量
        alert('2 true');
        break;
    case 1 + 1://计算数字相加
        alert('1 + 1 true');
        break;
    case 1 * 2://计算数字相乘
        alert('1 * 2 true');
        return ;//return也可以中断switch的case,并且会将整个方法中断
    case s * 2://计算变量
        alert('s * 2 true');
        break;
    default : //默认执行
        alert('default');
}
3.
function type(obj){
   switch(typeof obj){
       case 'string' : 
           return 'string';
       case 'function':
           return 'function';
       case 'object':
           return 'object';
       case 'number':
           return 'number';
   }
}
实例2:
1.
function case1(num)
    switch(num){ 
        case 1
            document.writeln("show 1!!"); 
            break
        case 2
            document.writeln("show 2!!"); 
            break
        case 3
            document.writeln("show 3!!"); 
            break
        default
            document.writeln("show others!!"); 
            break
    } 
}
2.
function case2(num)
    switch(num){ 
        case 1
            document.writeln("show 1!!"); //沒有break,所以會繼續執行case 2 
        case 2
            document.writeln("show 2!!"); 
            break
        case 3
            document.writeln("show 3!!"); //沒有break,所以會繼續執行case 4 
        case 4
            document.writeln("show 4!!"); 
            break
        default
            document.writeln("show others!!"); 
            break
    } 
}
3.
function case3(num)
    switch(num){ 
        case 1
        case 2//相當於if(num==1 || num==2) 
            document.writeln("show 1 or 2!!"); 
            break
        case 3
        case 4//相當於if(num==3 || num==4) 
            document.writeln("show 3 or 4!!"); 
            break
        default//相當於else 
            document.writeln("show others!!"); 
            break
    } 
}
4.
function case4(num)
    switch(f(num)){ 
        case 1
        case 2//相當於if(num==1 || num==2) 
            document.writeln("show 1 or 2!!"); 
            break
        case 3
        case 4//相當於if(num==3 || num==4) 
            document.writeln("show 3 or 4!!"); 
            break
        default//相當於else 
            document.writeln("show others!!"); 
            break
    } 
5. 
function case5(num)
    switch(num<=2){ //case可以为表达式
        case true
            document.writeln("num <= 2"); 
            break
        case false
            document.writeln("num > 2"); 
            break
    } 
6.//表示一个范围
function case6(x){
    switch(true){ 
        case x>0&&x<10
            alert(1); 
            break
        case x>=10&&x<20
            alert(2); 
            break
    } 
}
又如比如表示范围90~100,
function case7(num){
    switch(true){
        case num>90&&num<100:
            alert("hello");
            break;
    }
}



返回列表 返回列表
评论

    分享到