zoukankan      html  css  js  c++  java
  • Javascript中变量提升的问题(五)

    一、函数声明变量提升

      函数声明具有变量提升的问题,所以在函数被声明之前就可以访问。

    console.log(getValue()); 
    function getValue() { 
         return 'a'; 
    }
    

     需要注意的是现在可以在普通块内部定义函数,不会有变量提升,因为是在执行的时候,才会有函数声明。

    //将方法赋值给一个变量,方法就不会被重写,因此才能得到正确的结果。
    function functions(flag) {
        if (flag) {
          function getValue() { return 'a'; }
        } else {
          function getValue() { return 'b'; }
        }
    
        return getValue();
    }
    console.log( functions(true) );//a

      

    getValue();  //getValue is not a function 
    var flag = true; 
    if (flag) {
          function getValue() { return 'a'; }
    } else {
          function getValue() { return 'b'; }
    }

      

    改成函数表达式的形式如下:

    function functions(flag) {
        if (flag) {
          var getValue =  function () {
          	return 'a'; 
          }
        } else {
         var getValue = function () { 
          	return 'b'; 
          }
        }
    
        return getValue();
    }
    console.log( functions(true) );//a
    

     2017-2-7更:

     函数声明提升优先级大于变量声明提升优先级:

        

     函数表达式没有变量提升的过程:

    foo();             
    bar();           
    var foo=function bar(){
        console.log("111");
    }
    

     

     函数表达式等号后面必须为匿名函数,写成上述形式默认等号后面为匿名函数,所以bar找不到,同时函数表达式没有提升的过程所以无法在函数定义之前访问。

    二、var定义的变量,变量提升的问题

    判断window对象中是否函数a1变量,var定义的变量会有变量提升,所以a1实质上是在全局环境中。

    if(!("a1" in window)){
        var a1 = 222;
    }
    alert(a1);//undefined
    

     2017-2-7更:

    (function(){
     a = 5;
     alert(window.a);
     var a = 10;
     alert(a); 
    })();
    

     a是在函数中的一个变量,属于局部变量,全局变量中没有a。

     输出结果: undefined 10

    hello函数中的t没有通过var来定义,被提升到hello函数外面,覆盖了前面定义的t。

    2017-10-6更:

    console.log(a);
    var a = 88; 
    var a = function() {
    console.log(22);
    }
    
    console.log(a);
    function a() {
    console.log(222);
    }
    
    console.log(a);
    

      

  • 相关阅读:
    通用数据权限的思考与设计
    MyBatis传入参数为list、数组、map写法
    MyBatis的foreach查询(List、Array、Map)
    heX——基于 HTML5 和 Node.JS 开发桌面应用
    优秀设计:12个带给你灵感的创意单页网站作品
    So Easy!让开发人员更轻松的工具和资源
    触摸手势图标大全:48款触摸手势图标免费下载
    放松的周末,一起欣赏15个华丽的艺术品
    Skytte:一款令人印象深刻的 HTML5 射击游戏
    分享本年度最佳的15个 Photoshop 实例教程
  • 原文地址:https://www.cnblogs.com/yy95/p/6196401.html
Copyright © 2011-2022 走看看