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(); 
    
  • 相关阅读:
    molloc堆区的动态内存分配
    异常控制流(csapp)
    优化程序性能(CSAPP)
    链接及链接器
    C# 继承 多态
    virtual和abstract
    封装
    SQL数据库语句优化方法
    select 查询所有和查询所有非空
    联合查询的用法
  • 原文地址:https://www.cnblogs.com/caijw/p/8048184.html
Copyright © 2011-2022 走看看