You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2 function 关键字对变量进行变量提升,既会把变量提前声明,又会把变量提前赋值,也就是把整个函数体提升到代码的顶部
3 有一些代码是不会执行的但是仍旧会发生变量提升,规则适用于 1,2
3.1 return 之后的代码依旧会发生变量提升,规则适用于 1,2
3.2 代码报错之后的代码依旧会发生变量提升,规则适用于 1,2
3.3 break 之后的代码依旧会发生变量提升,规则适用于 1,2
4 有一些代码是不会执行但是仍旧会发生变量提升,但是规则要发生变化
4.1 if 判断语句 if 判断语句中 var 关键字以及 function 关键字声明的变量只会发生提前声明,不会发生提前赋值,也就是不会吧函数体整体提升到当前作用域顶部。规则跟 1,2 不适用
4.2 switch case 规则跟 1,2 不适用
4.3 do while 规则跟 1,2 不适用
4.4 try catch catch 中声明的变量只会发生提前声明,不会发生提前赋值。
Ps:在条件判断语句和 try catch 中的声明的变量不管是否能够执行,都只会发生提前
声明,不会发生提前赋值。
解析:
// 如果一个变量声明了但是未赋值,那么输出这个变量就会输出 undefinedvarnum;console.log(num);// 如果一个变量没有声明也没有赋值,那么就会报一个错:console.log(num);// 输出一个不存在的变量 Uncaught ReferenceError: num is not defined
// var 关键字进行的变量提升console.log(num);varnum=123;console.log(num);varnum=456;console.log(num);// 变量提升之后的代码:varnum;console.log(num);num=123;console.log(num);num=456;console.log(num);
// function 关键字的变量提升console.log(fn);functionfn(){console.log(1);}// 变量提升之后的代码:functionfn(){console.log(1);}console.log(fn);// 输出fn的函数体
答案:
变量提升
A、js 代码执行的过程
var 关键字和 function 关键字声明的变量会进行变量提升
B、变量提升发生的环境:发生在代码所处的当前作用域。
解析:
The text was updated successfully, but these errors were encountered: