what 变量提升
在js中只有两种作用域全局作用域+函数作用域
在ES6之前,js是没有块级作用域。
JavaScript 代码的执行分为两个阶段。
1第一个阶段在当前词法环境中注册所有的变量和函数声明
2第二个阶段的 JavaScript 执行
var与let的区别是->var 可以变量提升let不会,notice(
变量提升不可以跨script
函数会优先于变量 先提升)
举例说明:(变量提升)
console.log(a);
var
a = 1;
// 输出 undefined
/***************************/
<script>
console.log(a)
</script>
<script>
var
a = 1;
</script><br>// 控制台报错
ReferenceError: a is not defined
举例说明(函数会优先于变量 先提升)
console.log(foo);
var
foo=10;
console.log(foo);
function
foo(){
}
console.log(foo);<br>
// function foo, 10 10
实际案例
变量提升的例子(notice 变量只可以声明一次):
num = 6;
var num = 7;
var num;
console.log(num); // 不报错,输出7,也证明了变量只会声明一次,其他的会被忽略。
函数提升的例子:
say("123");// 即使在声明之前调用依然可以执行,不会报错
function say(name) {
console.log( name);
}