变量提示,函数提升

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

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(); 

转载于:https://www.cnblogs.com/caijw/p/8048184.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值