公司网站用模板做,内蒙建设厅网站怎么查建筑电工证,网站被挂广告怎么办,有人用wordpress做企业变量提升真的搞懂了吗#xff1f;打脸的一道题我们知道JS代码在执行之前#xff0c;会做一系列的事情#xff0c;其中就包括变量提升#xff0c;原本以为把变量提升搞懂的我#xff08;因为这两天一直在研究变量提升#xff0c;自我感觉已经很良好了#xff0c;哈哈哈打脸的一道题我们知道JS代码在执行之前会做一系列的事情其中就包括变量提升原本以为把变量提升搞懂的我因为这两天一直在研究变量提升自我感觉已经很良好了哈哈哈拿到了一道打脸的题。当然了拿给身边的程序员朋友们做对的也......废话不多说一起来看下这道题吧。1. 题目var a 0;
if (true) {a 1;function a() {};a 21;console.log(a)
}
console.log(a);
答案21 12. 重新学习变量提升2.1 var首先说使用var声明的变量只要那个变量是使用var声明的那么在变量提升阶段要做的事情只有一个就是去声明这个变量。一道简单的题目看懂var的变量提升console.log(a);
var a 1;
console.log(a);
在代码执行之前先创建一个变量a此时并不会进行赋值等操作代码执行 console.log(a);因为此时已经有a这个变量了只不过没有赋值因此输出undefinedvar a 1;给变量a进行赋值为1console.log(a);这时候再输出a的值就是上面的赋值结果1控制台查看输出结果 2.2 let const我们知道使用let和const声明的变量没有变量提升只有当代码走到那一行才会去执行声明等操作2.3 function当function fn(){...}没有在if/for等任何大括号内的时候它会声明定义即把右边的值存储在堆内存中并把堆内存地址存储在栈内存然后声明变量fn最后让fn和堆地址关联但如果把上面的这句话放在if/for这样的大括号内的时候就变成下面这样的过程了声明一个变量fn存储在栈内存中当满足条件进入到大括号内的时候 第一件事情就是定义这个函数即让这个变量名和堆地址进行关联。注意此时这个变量fn已经变为这个块内私有的变量了和外面的fn没有任何关系当代码执行过程中遇到function fn(){...}的时候它会去把全局中的fn修改一下修改为堆中fn的值。修改完之后后面对fn的操作又和全局的fn没任何关系3.看穿题目的庐山真面目这道题就是利用上面的所说到function的变量提升情况。即当在if/for中存在函数并且条件成立那么这个函数就变为私有直到遇到function fn(){...}的时候才会去操作全局的fn其它情况操作的fn都是私有的。下面是这道题的图解过程4. 同类型题目的练习{function foo(){}foo1;
}
console.log(foo);{function foo(){}foo1;function foo(){}
}
console.log(foo);{function foo(){}foo1;function foo(){}foo2;
}
console.log(foo);
5. 总结这也是浏览器为了解决新老版本改善的function的变量提升机制可以看出也是在一步步的完善因此我们也要不断的学习才可以跟上互联网的快速发展。