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

变量提升和函数提升

作者: Allan要做活神仙 | 来源:发表于2017-03-29 10:04 被阅读108次

JS不像C语言,C语言是先声明后使用,否则会报错。但JS中,有变量提升现象,可以先使用后声明。

JS存在变量提升,这个设计其实是低劣的,或者是语言实现时的一个副作用。它允许变量不声明就可以访问,或声明在后使用在前。
但在ES6加入let/const后,变了Hoisting就不存在了。

变量提升

把变量提升到函数top的地方。但要注意仅仅是变量提升,赋值并不提升。

var v = 'Hello World';
(function() {
    alert(v);    // undefined
    var v = 'I love you';
})()

相当于:

var v = 'Hello World';
(function() {
    var v;
    alert(v);
    var v = 'I love you';
})()

所以,才会提示说“undefined”。

(function(){ 
    var a='One'; 
    var b='Two'; 
    var c='Three'; 
})() 

实际上她是这个样子:

(function(){ 
    var a,b,c; 
    a='One'; 
    b='Two'; 
    c='Three'; 
})() 

这个时候就把变量提升了。

从这里,我们也学习到,我们在写js code 的时候,需要把变量放在块级作用域的顶端,比如我在上面所举的例子:var a,b,c;。防止出现意外。

函数提升

函数提升是把整个函数都提到前面去。

在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。
我们需要重点注意的是:

  • 只有函数声明形式才能被提升。
    1、函数声明形式 【成功】
function myTest(){ 
    foo(); 
    function foo(){ 
      alert("我来自 foo"); 
    } 
} 
myTest(); 

2、函数表达式方式【失败】

function myTest(){ 
    foo(); 
    var foo =function foo(){ 
      alert("我来自 foo"); 
    } 
} 
myTest(); 

相关文章

  • JS中的提升

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

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • 2021-04-02

    变量提升和函数提升以及他们的优先级 1,变量提升:变量提升是指将变量声明提升到它所在的作用域的最开始部分 2,函数...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

  • 变量提升

    变量提升 Hoisting 变量和函数的声明会在编译时被提升到作用域的顶部 提升的是声明,函数会连带函数体提升 i...

  • 变量提升和函数提升

    摘自《你不知道的JavaScript上卷》KYLE SIMPSON著 变量提升 引擎会在解释 JavaScript...

  • 变量提升和函数提升

    1.变量提升 console.log(a);//undefined var a=123; 因为变量a的声明被提到了...

  • 变量提升和函数提升

    在javascript里存在一种叫变量声明提升的东西。这里来详细的说一说,到底什么样的声明会提升,提升了什么东西。...

  • 变量提升和函数提升

    JS不像C语言,C语言是先声明后使用,否则会报错。但JS中,有变量提升现象,可以先使用后声明。 JS存在变量提升,...

网友评论

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

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