发表于: 2018-06-01 23:31:40
4 621
今天完成的事情:学习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;
}
}
评论