zoukankan      html  css  js  c++  java
  • 变量提示,函数提升

    变量提升 只是提升变量的声明,并不会把赋值也提升上来,函数提升是把整个函数都提到前面去。只有函数才会创建新的作用域(函数声明才会被提升,表达式声明不会被提升)

    var v='Hello World'; 
    alert(v); //Hello World
    
    
    var v='Hello World'; 
    (function(){ 
    	alert(v); //hello world
    })() 
    
    
    var v='Hello World'; 
    (function(){ 
    	alert(v); //undefined
    	var v='I love you'; 
    })() 
    等同
    var v='Hello World'; 
    (function(){ 
    	var v; //变量提升
    	alert(v); //undefined
    	v='I love you'; 
    })() 
    
    
    //当解析器读到 if 语句的时候,它发现此处有一个变量声明和赋值,于是解析器会将其声明提升至当前作用域的顶部(这是默认行为,并且无法更改),这个行为就叫做 Hoisting。
    var a = 1;
     
    function foo() {
      if (!a) {
        var a = 2;
      }
      alert(a);
    };
     
    foo();
    
    var a = 1;
     
    function foo() {
      var a;
      if (!a) {
        a = 2;
      }
      alert(a);
    };
     
    foo();
    
    
    (function(){ 
    	var a='One'; 
    	var b='Two'; 
    	var c='Three'; 
    })() 
    (function(){ 
    	var a,b,c; 
    	a='One'; 
    	b='Two'; 
    	c='Three'; 
    })() 
    

    2.2 函数提升

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

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

    函数声明方式提升【成功】

    复制代码 代码如下:

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

    函数表达式方式提升【失败】

    复制代码 代码如下:

    function myTest(){ 
    	foo(); 
    	var foo =function foo(){ 
    		alert("我来自 foo"); 
    	} 
    } 
    myTest(); 
    
  • 相关阅读:
    对我影响最大的三位导师
    global与nonlocal
    random模块
    time模块
    datetime模块
    sys模块
    os模块
    collection模块
    hashlib模块
    pickle模块
  • 原文地址:https://www.cnblogs.com/caijw/p/8048184.html
Copyright © 2011-2022 走看看