大丰做网站价格,应用软件开发专业,大丰网站建设,如何用dw做网站前端一.作用域问题
1.全局作用域
在全局都能进行访问的变量 var a 10;function fn() {var b 20;return a b;}console.log(fn());
2.局部的作用域
只能在限定的范围内进行访问 function fn() {var b 20;}console.log(b); b is not defined 打印的结果是b这个变量没用定义
3…一.作用域问题
1.全局作用域
在全局都能进行访问的变量 var a 10;function fn() {var b 20;return a b;}console.log(fn());
2.局部的作用域
只能在限定的范围内进行访问 function fn() {var b 20;}console.log(b); b is not defined 打印的结果是b这个变量没用定义
3.块级作用域
(1)使用var for (var i 0; i 5; i) {}console.log(i);
打印的结果是:6
(2)使用let for (let i 0; i 5; i) {}console.log(i);
i is not defined
这里使用let定义变量就使用到了es6的let语法,块级作用域使用let定义的变量只能在let{}包裹的快中就行访问 4.作用域的查找规则
代码1: function fn() {var a 10;return function fn1() {var a11console.log(a);};}var b fn();b()b()b() 首先在自己的作用域进行查找,如果没用找到就会往行上一级的作用域进行查找,直到找不为止。 代码2: function fn() {var a 10;return function fn1() {console.log(a);};}var b fn();b() //10b() //11b() //12 二.通过方法的进栈和出栈来看闭包 function fn() {var a 10;return console.log(a);}fn();fn(); fn方法入栈,在只想完毕后,就会销毁a这个变量。 function fn() {var a 10;return function fn1() {console.log(a);};}var b fn();b() //10b() //11b() //12
这个方法调用fn函数,返回fn1这个函数但是fn1这个函数里面的变量a没有指向的对象,因此它指向fn函数的a10,调用fn()函数按照以往的逻辑本应该将a这个变量进行销毁,返回的也是一个可调用的b函数,因为b函数中的a变量需要fn函数定义的变量,所以不会被销毁。
因此没调用一次fn函数a机会递增1,.这也是不建议使用必要的原因,因为会造成栈溢出。
、