标签:function 函数 递归 作用域 局部变量 var 全局变量 fn
作用域
-
在函数中使用var定义的变量或者函数的形参,都是局部变量,也就是说这个变量只能作用域函数内部,函数运行完成后这个变量会被销毁,在函数外是不存在该变量的
-
使用var定义在函数外的变量,可以在函数内被调用,定义在函数外的变量叫做全局变量,函数运行完成后不会销毁全局变量
-
函数内也可以定义函数,所以函数内定义的函数也是局部函数,只能在函数内调用
-
全局变量
var a=1;
function fn(){
a++;
}
fn();
console.log(a);
- 局部变量
function fn(){
var a=1;
a++;
return a;
}
var b=fn();
console.log(b);
参数也是局部变量
```JS
function fn(a){
a++;
}
var b=1;
这里是把b的值传入,并不是改变了b
fn(b);
函数参数在函数外是无法获取的
console.log(b);
```
-
在函数中也和全局变量的变量一样,当函数被调用时,函数内的局部变量就会被预解析,在栈中开辟一个空间,并起名为这个局部变量名称,但是没有赋值,等运行到赋值时才赋值,栈中开辟空间的地方和全局变量开辟空间的地方不同,全局变量开辟空间实在最外层,局部变量开辟的栈中空间时从属于当前这个函数的内部空间
-
两个函数中的局部变量是没有任何关系的
function fn(){ var a=1; a++; } function fn1(){ var a=2; a++; } function fn(){ console.log(a);//undefined var a=3; } fn(); function fn(){ console.log(a);//报错 } fn();
-
如果函数中有与全局变量同名的局部变量时,这个函数内所有的变量都是局部变量,无法调用到全局变量
var a=1; function a(a){ if(a===undefined){ a=5; }else if(a===2){ a++; }else{ var a=10; } console.log(a); } a(2);
-
这里a是全局变量,首先预解析时,他就是一个函数a,但是当执行到a=1时,就会覆盖函数,于是a=1,a(1) 因为a不是函数,而是1,这时候就会报错a不是一个函数
var a; function a(a){ if(a===undefined){ a=5; }else if(a===2){ a++; }else{ var a=10; } console.log(a); } a(2); a=2;
-
局部变量因为定义在函数内,也就是说只有函数执行时才会重新定义并且使用,函数运行完成后会被销毁隐居局部变量无法长期保存下来,以后调用时无法调用的,如果希望以后也可以使用这个变量,需要把这个变量return返回函数储存为全局变量
回调函数和递归
回调函数
定义:在一个函数中,传入的实参是另外一个,在这个函数中执行实参的这个函数
在1000毫秒后仅执行一次这个回调函数
setTimeout(function(){
},1000);
每间隔1000毫秒执行一次这个回调函数
setInterval(function(){
console.log("aaa");
},1000);
使用回调函数的目的,是为了解决先执行完某个操作运算之后在执行当前这个函数,或者在触发某个内容时再执行这个函数
递归
function fn(){
fn();
}
fn();
定义:当前函数自身内部执行自己,不断的重复
Maximum call stack size exceeded 堆栈上限溢
出
递归需要一个条件来结束递归,或者在不满足条件时不进入递归
标签:function,函数,递归,作用域,局部变量,var,全局变量,fn 来源: https://www.cnblogs.com/ciyisheng/p/15673746.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。