zoukankan      html  css  js  c++  java
  • 函数声明,函数表达式,变量

    js 中首先将变量声明及函数声明提升至当前作用域的顶端。

    1.而函数声明提升又是优于变量声明提升的

    2.并且同名函数声明会被后者覆盖

    3.同名变量声明会被跳过

    4.函数表达式等同于变量

    这四句记住了,关于声明提升的问题就不是问题了。

    举几个比较经典的例子。

    1.

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

    声明提升后相当于

    function a() {}   //  1. 函数声明优于变量声明
    var a;      // 被挑过 2.同名变量声明会被跳过 
    console.log(a)   //   function a(){}
    a =1;    

    2.

    var bar = function () {
        console.log(4);
    };
    function bar() {
        console.log(5);
    }
    
    bar();  //4

    提升后相当于

    function bar() {
        console.log(5);
    }  
    var bar; 
    bar = function () {
        console.log(4);
    };
    
    bar();  //4

    3.

    1    foo(); // 2
    
    2   var foo = function() {
            console.log(1);
        };
    
    3   foo(); // 1
    
    4    function foo() {
            console.log(2);
        }
    
    5   foo(); // 1

    相当于原来的第二步拆成了两步

    4    function foo() {
            console.log(2);
        }
    2    var foo ;
    
    1   foo(); // 2
    
    2   foo = function() {
            console.log(1);
        };
    
    3    foo(); // 1
    
        
    5   foo(); // 1

    为什么要提升,可以看看Dmitry Soshnikov之前的一篇文章

    函数提升就是为了解决相互递归的问题,大体上可以解决像ML语言这样自下而上的顺序问题。

    变量提升是人为实现的问题,而函数提升在当初设计时是有目的的。

  • 相关阅读:
    OSX中zsh新增环境变量
    新的开始 春光明媚
    tmux
    继承
    6
    Object类
    网页收藏
    画王八
    ES6 语法之import export
    ES6 语法 之 destructuring
  • 原文地址:https://www.cnblogs.com/hellobeen/p/9773311.html
Copyright © 2011-2022 走看看