zoukankan      html  css  js  c++  java
  • JavaScript 变量声明提升

    JavaScript 变量声明提升

    一、变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动

    二、在基本的语句(或者说代码块)中(比如:if语句、for语句、while语句、switch语句、for...in语句等),不存在变量声明提升

    三、函数声明会提升,但是函数表达式的函数体就不会提升

     1  fun();       // hello 
     2     function fun(){
     3       console.log("hello");
     4     }
     5     // --------------
     6     // 提升后
     7 
     8     function fun(){
     9       console.log("hello");
    10     }
    11 
    12     fun();       // hello 

     1  var fun = function(){
     2       console.log("hello");
     3     };
     4 
     5     // --------------
     6     // 提升后
     7 
     8     var fun;
     9 
    10     fun();        // 报错,TypeError: fun is not a function
    11 
    12     fun = function(){
    13       console.log("hello");
    14     };

    四、如果一个变量和函数同名,函数声明优先于变量声明(毕竟函数是 JavaScript 的第一等公民),并且与函数名同名的变量声明将会被忽略

    看几个例题:

    第一个: 

    1 var foo = 1;
    2 function bar() {
    3     if (!foo) {
    4         var foo = 10;
    5     }
    6     alert(foo); //输出为10
    7 }
    8 bar();

    在if语句中(在javascript不能叫块了吧~~),变量不会被提升,因此!foo判断为true,所以输出就为10啦。                                


     第二个:

    1 var a = 1;
    2 function b() {
    3     a = 10;
    4     return;
    5     function a() {}
    6 }
    7 b();
    8 alert(a);  // 1

    这是一道神奇的题。第一眼认为输出为10。but,根据第四句话,可以得到:

    1 function b() {
    2   function a() {};//变量提升
    3   a = 10;
    4   return;
    5 }

    function a() {} 这种定义方式和 var a = function () {}一样。所以,又可以得到:

    1 var a = 1;                 //defines "a" in global scope
    2 function b() {  
    3    var a = function () {}; //defines "a" in local scope 
    4    a = 10;                 //overwrites local variable "a"
    5    return;      
    6 }       
    7 b();       
    8 alert(a);                 //alerts global variable "a"

    1 var a=1;
    2 (function(){
    3   a=2;b=2;
    4 
    5 })();
    6 alert(a==b);  //true,作用域的问题,有var和没有var的区别~
  • 相关阅读:
    软退回和硬退回的区别和联系
    十家国内知名的EDM服务提供商
    2018年第一记:EDM策略分享-EDM营销的策略分析
    分享几个目前研究出来的邮件不进垃圾箱技巧
    如何快速增加邮件列表用户数量
    EDM数据营销之电商篇| 六大事务性邮件,环环相扣打造极致用户体验!
    如何整合线上和线下营销进行深度交融
    品牌logo在EDM数据营销中的运用
    2017年内容营销如何提高ROI转化率
    营销必读:2017移动应用的五大营销趋势
  • 原文地址:https://www.cnblogs.com/destinyruru/p/5831570.html
Copyright © 2011-2022 走看看