探索javascirpt-作用域
1.使用var定义变量,和漏了var定义变量时的情况
function a() { function c(){ cc = 4; function d() { console.log(cc);//4 } d(); } c(); console.log(cc);//4 } a(); console.log(cc);//4 console.log(window.cc);//4
很明显当未使用var定义变量时,cc变量被定义于全局变量,
但是,真的只要不使用var就会被挂入window吗?其实不是,看下列代码
1 function a() { 2 var bb = 3; 3 var cc = 5; 4 function c(){ 5 cc = 4; 6 function d() { 7 console.log(cc);//4 8 } 9 10 d(); 11 } 12 13 c(); 14 console.log(cc);//4 15 } 16 a(); 17 console.log(cc); //undefined 18 console.log(window.cc); //underfined
是否很惊奇,此时cc被挂入了a函数里定义的cc,所以是否有领悟:
当未用var定义变量的时候,javascript引擎会检索作用域层级来解析用户名,从作用域链中一层一层往上查找变量,如果查找得到,边改变其值,如果整个作用域链中都查找不到,便会挂入window(nodejs为global),成为全局变量
2,javascript中的函数作用域是通过词法来划分的
简单来说就是不管函数被在哪里调用,函数的作用域链早就在定义函数的时候固定了。
此特性被广泛用于模块化,闭包。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。