美文网首页
js变量和函数声明提升

js变量和函数声明提升

作者: 嘻哈章鱼小丸子 | 来源:发表于2017-11-22 16:51 被阅读0次

js代码分为两个阶段:预解析阶段和执行阶段
预解析阶段会找到所有的声明,将这些声明从代码中出现的位置移动到当前执行环境的顶部并用合适的作用域将它们关联起来,这就叫做提升。

一、变量声明提升
console.log(a)// Uncaught ReferenceError: a is not defined

如果就这么输出的话,控制台肯定飘红报错,此时的a是没有被声明的,也没办法进行变量提升。但是,如果这样:

console.log(a)//undefined
var a=0;
console.log(a)//0

控制台没有报错,第一个输出为undefined,字体颜色为灰色,此时a被提升声明了,但没有赋值;而第二个输出为0,此时a 才被赋值!
由此说明只有声明操作会被提升,赋值和逻辑操作会被留在原地等待执行!
那么实际的处理过程应该是:

var a;
console.log(a)//undefined
a=0;
console.log(a)//0
二、函数声明提升
aa();
function aa(){
     console.log('11111');
}

和变量声明提升一样,预解析的时候先声明这个函数再执行,那么实际的处理过程是这样:

function aa(){
     console.log('11111');
}
aa();
三、函数表达式声明提升

大家都知道,函数表达式不像函数一样声明了就能调用,因为还有个执行赋值的过程,例如下面这个例子:

console.log(test);
test();
var test = function () {
      console.log('test');
}

运行的时候就会报TypeError,因为test 被调用时只是一个变量,并不是函数,正确的写法应该是:

console.log(test);
var test = function () {
      console.log('test');
}
test();

注意下,上述例子中第一个test的输出是undefined,说明test变量当时已经被声明了。由此可得出:函数表达式的提升和变量的提升是一样的。那么实际的处理过程是这样的:

var test ;
console.log(test);
test = function () {
      console.log('test');
}
test();

相关文章

  • js中变量和函数声明的提升

    二 、 js中变量和函数声明的提升

  • JS笔记 命名问题

    JS中函数和变量重名时,后声明的覆盖先声明的,后赋值的覆盖先赋值的。 变量提升和函数提升时,变量的声明是在函数的声...

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • js面试题

    1、js 数据类型 基本数据类型 引用数据类型 2、js 变量和函数声明的提升 在js中变量和函数的声明会提升到最...

  • 猫眼

    var变量提升,函数声明提升,消除变量声明提升(let); 高阶函数,函数式的编程,柯里化 原型链继承,js面向对...

  • js变量声明提升与函数表达式

    1.变量声明提升 js引擎会把变量声明与函数声明都提升到当前函数的顶部。eg: js引擎编译为 2.函数表达式 对...

  • 浏览器学习笔记-JS执行

    变量提升 变量提升原理浏览器对js是先编译后执行,在编译过程中,js中的变量声明会被提升到代码段落前面。函数声明和...

  • JavaScript中函数声明提升

    运行结果:(chrome 54.0+、IE11) js中变量声明和函数声明会在解析的时候提升【参考MDN变量提升】...

  • JS变量声明提升和函数声明提升

    JS代码分为两个阶段:编译阶段和执行阶段; 编译阶段:会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作...

  • js变量和函数声明提升

    js代码分为两个阶段:预解析阶段和执行阶段预解析阶段会找到所有的声明,将这些声明从代码中出现的位置移动到当前执行环...

网友评论

      本文标题:js变量和函数声明提升

      本文链接:https://www.haomeiwen.com/subject/ntsmmxtx.html