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(); 
    
  • 相关阅读:
    深入浅出Nginx
    图解MySQL索引BTree(B+Tree)
    postman升级后,collection集合中的接口找不到了
    PHP抖音SDK搭建问题整理
    vi10
    vi8
    vi9
    vi4
    shell 自动输入密码
    LINUX平台可以用GDB进行反汇编和调试。
  • 原文地址:https://www.cnblogs.com/caijw/p/8048184.html
Copyright © 2011-2022 走看看