码迷,mamicode.com
首页 > 其他好文 > 详细

什么是变量提升?什么是函数提升?

时间:2020-02-03 19:19:21      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:article   协议   环境   net   完成   csdn   script   变量   def   

在js中只有两种作用域,全局作用域和函数作用域,在ES6之前,js是没有块级作用域。

JavaScript 代码的执行分为两个阶段。第一个阶段在当前词法环境中注册所有的变量和函数声明,简单说就是,解析,解析完成之后,第二个阶段的 JavaScript 执行就开始了!

JS中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升。

JavaScript 仅提升声明,而不提升初始化。如果你先使用的变量,再声明并初始化它,变量的值将是 undefined。

1:所有的声明都会提升到作用域的最顶上去。

2:同一个变量只会声明一次,其他的会被忽略掉。

3:函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。

变量提升的例子:

num = 6;
var num = 7;
var num;
console.log(num); // 不报错,输出7,也证明了变量只会声明一次,其他的会被忽略。

函数提升的例子:

catName("Chloe");// 即使在声明之前调用依然可以执行,不会报错

function catName(name) {
    console.log("我的猫名叫 " + name);
}

在定义的函数名字和变量名相同的情况下,函数提升优先级高于变量的例子:

func(); // 1
var func;
function func() {
  console.log(1);
}
func = function() {
  console.log(2);
}

输出1,不会输出2。函数声明和变量声明都会被提升,但是需要注意的是函数会先被提升,然后才是变量。

var func;尽管出现在function func()之前,但它是重复的声明,会被忽略,因为函数声明会被提升到普通变量之前。

等同于这样:

function func() {
  console.log(1);
}
func(); // 1
func = function() {
  console.log(2);
}

牢记这三点:

只有声明本身会被提升,而赋值操作不会被提升。

变量会提升到其所在函数的最上面,而不是整个程序的最上面。

函数声明会被提升,但函数表达式不会被提升。
————————————————
版权声明:本文为CSDN博主「木心Do」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33505829/article/details/86158287

什么是变量提升?什么是函数提升?

标签:article   协议   环境   net   完成   csdn   script   变量   def   

原文地址:https://www.cnblogs.com/weijiangZ/p/12256625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!