作用域
1、js中没有块级作用域
2、如果有块级作用域,那么下面代码将会是undefined undefined
<script> for (var i = 0; i < 10; i++) { var num = i; } console.log(i);//10 console.log(num);//9 </script>
词法作用域
1、就是在代码写好的那一刻,变量的作用域就已经确定了,这种作用域,就是所谓的词法作用域
2、和词法作用域相对的叫动态作用域 ,js中是词法作用域不是动态作用域
3、在JS中唯一能产生作用域的是函数
<script> //代码写好的那一刻,变量的作用域就已经确定了 //作用域要么在函数中,要么在全局,因为没有块级作用域 var x = 100; function f() { alert(x); } function f1() { var x = 1; f(); } function f2() { x = 1; f(); } f1();//100 f2();//1 </script>
在写下代码的那一刻作用域就确定了,f()函数中的x,永远会去找全局变量中x
词法作用域规则
1、函数允许访问函数外的数据
2、整个代码结构中只有函数可以限定作用域
3、作用域规则首先使用提升规则分析
4、如果当前作用域中有了该变量, 就不考虑外面的同名变量
参考:https://www.cnblogs.com/foodoir/p/5977950.html