2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > js的变量作用域 变量提升

js的变量作用域 变量提升

时间:2022-12-24 12:22:14

相关推荐

js的变量作用域  变量提升

(function(){a = 5;alert(window.a);var a = 10;alert(a);})();

结果: undefined 10

代码等同于下面

var a = undefined; //定义全局变量(function(){var a;// a = 5;// a = 5;但是被局部变量覆盖,这时候的a是局部变量alert(window.a); //a = undefined; 试图访问全局变量a,可是并没有赋值a = 10; //依然是局部变量aalert(a); //a = 10})();

分析:

1.在产生一个作用域的时候,会预编译一次里面的变量,其中的动作是将所有的变量名,函数名,提前定义,然后在赋予当前的变量的所在作用域,运行。

2.变量名的定义会覆盖函数名,可是函数名(见下面)

var a;function a(){alert(12);}a();//alert(12)a = 10; a();//Uncaught TypeError: a is not a function

a的定义,function的定义 换个顺序

(function(){var a=10;function a(){alert(2);return 8;}alert(a); alert(a());//Uncaught TypeError: a is not a function})();//分析:a() 的函数名并不会覆盖变量名function a(){alert(2);return 8;}(function(){var a=10;alert(a); // 10alert(a());//结果:Uncaught TypeError: a is not a function;如果把函数名称换成c,那么js会往上级查找,如果在本作用域中找到a,那么直接调用,这时的调用会忽略a的类型(若类型的语言?)alert(window.a());// 2, 8})();

在建立以一个作用域时,编译时,变量的声明会提前,在确定作用域,运行。js中的变量名不会被同名的函数覆盖,而同名的函数会被变量覆盖。在js中调用函数,如果有同名的变量,那么会直接调用这个变量,不会向上查找,如果没有这个变量,才会向上查找

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。