今天的元气已上线
没有什么是办不到的事情
加油
??\\\嘻嘻嘻
下面来写代码啊啊啊啊
js中的作用域
var a = 123;
function fun1(){
alert(a);//找寻全局变量,输出123
a = 234;//没有用var声明的变量,不会提前哦
}
fun1();//123
console.log(a);//被函数中的新值给覆盖//234
看完上述代码,你是不是对作用域有了深刻的理解呢
NONONO!!!
不一定哦,我们的Js可没有这么简单,下面再来看另一份Js代码
思考输出是什么
不要轻易放弃哦
var a = 123;
function fun(a){
alert(a); // a === undefined
a = 456; //此时是给函数作用域中的形参a赋值,不影响全局的变量a
}
fun();//无参调用
console.log(a);//a的值仍然不变,为123;
HAHAHAHA
不要着急,不要着急,相信你看完上述代码,并实际操作(当然一定要实际自己动手操作)之就会恍然大悟
还没懂的小伙伴也不要着急,铛铛荡!!!!!
总结来啦
- 对于无参函数来说,如果在函数体中调用某个变量或函数,函数会先在自己的作用域中从查找,如果没有就向外层的作用域中查找,例如上述代码一,调用fun函数输出123。
- 在js中用var声明的变量或者是函数表达式都会有变量提升的作用,例如下面的例子就很好的说明了这一点
alert(a); var a = 123;
这个代码中a被提前声明,但没有被赋值,所以弹出结果是undefinedfn();var fn = function() { alert("hello"); }
这串代码不会执行,类比变量,fn的值此时是undefined并不是函数,所以无法调用,即会报错。 - 但是没有用var声明的则不会提前,但函数会被提前加载,也就是说,函数调用可以在函数声明以前,也可以在声明以后,总之可以再任何位置。但是变量将失去提前的作用,例如
fun();function fun() { alert("hello"); }
这串代码将会被完美执行
但是alert(a); a =456;
此时这串代码会报错,因为不用var将失去提前声明变量的作用。
注意:
未定义与未声明不是一个概念!!!!
undefined 与 无情报错,我们当然喜欢undefined了
太强硬可不好,嘻嘻
好了,下面来思考另一个代码的输出
var a = 123;
function fun(){
alert(a);
var a = 345;
}
fun();
alert(a);
当然我相信这对你来说小菜一碟
不过好好理解以上三个实例对我们理解js中的变量与函数有着至关重要的作用
加油 (NEVER GIVE UP!)
我常常想
我一定要努力去做一个傻小子
不管结果如何
都要撞一次南墙
不管那么多
开心就够了