JS作用域
JS的作用域可以分为全局作用域和局部作用域,全局变量可以在所有的脚本和函数中使用,而如果变量在函数中声明的,则称为局部作用域,局部作用域只能在函数内部访问
成都网络公司-成都网站建设公司创新互联建站10年经验成就非凡,专业从事成都做网站、成都网站制作,成都网页设计,成都网页制作,软文发稿,1元广告等。10年来已成功提供全面的成都网站建设方案,打造行业特色的成都网站建设案例,建站热线:18982081108,我们期待您的来电!1: 全局变量
2:局部变量:
JS闭包
我们说函数中定义的局部变量只能在函数中起作用,但是通过闭包可以将使函数使用别的函数中的局部变量,但是闭包会大量占用内存 会导致网页内存泄露 ---所以一般尽量避免使用闭包
实例:
function f1(){
var a=10;
return a;
}
function f2(){
console.log(f1());
}
f2();
上面实例中函数2中可以调用函数1中的变量a,输出结果为10.
接下来举一些函数方面的实例,方便更好的理解
1:
因为t()函数是匿名函数,没有调用不会自己执行,所以当第一次调用f1()函数时,t()函数不执行,当t()执行后,a自加1,返回a等于2,于是第二次调用的时候就会得到a=2的结果,之后同理;而如果把调用函数改为
var a1=f1();
a1();//1
t();
var a2=f1(); //重新执行一遍
a2()//1
刚开始做这道题的时候,以为a2()中得到的结果是a=2,但是当重新定义var a2=f1()时,函数也会重新初始化,所以就算之前执行过一次t()函数,在重新初始化后与a2无关。
2:
var temp = "object";
(function () {
console.log(temp);//undefined //提前声明
var temp = "student";
console.log(temp);//student
})();
这道题在我开始做的时候很难理解,第一个temp为什么会是undefinde一直纠结了很久,object是一个全局变量,而student则是函数中的一个局部变量,当在函数中调用student的时候会覆盖object,又因为函数中的变量可以被提前声明,本题就相当于
var temp = "object";
(function () {
var temp;
console.log(temp);//undefined //提前声明
var temp = "student";
console.log(temp);//student
})();
所以第一个console.log(temp )的结果就为undefined,第二个的结果就为student
3:
function f1() {
var n = 999;
return function f2() {
return n;
}
}
console.log(f1()());//999
console.log(f1());//返回return后面的一堆
4:
(1) var name="global";
function foo(){
console.log(name);
}
function fooOuter1(){
var name="local";
foo();
}
fooOuter1();//global
(2)var name="global";
function fooOuter2(){
console.log(name);//undefined
var name="local";
function foo(){
console.log(name);//local 局部函数取就近
}
foo();
}
fooOuter2();//local
这两个题很相近,但因为作用域的不同结果截然相反,第一个题中因为函数中的变量作用域只能作用在本函数中,而不能作用到其他函数中 ,所以在fooOuter1中调用foo函数,foo无法调用fooOuter1中的变量,只能调用全局变量。而如果把题1换一个形式,用闭包,则得到结果为local
var name="global";
function foo(){
var name="local";
console.log(name);
}
function fooOuter(){
foo();
}
fooOuter()//返回结果为local
而在题二中,因为是在函数体中调用,函数体中的local会覆盖global,所以会先调用local
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:JS闭包-创新互联
网页网址:http://lswzjz.com/article/djdieh.html