js变量提升

JS把定义在后面的变量(并不赋值)或函数(整个函数)提升到前面定义。
作用域(scoping)
变量提升(Hoisting)

最简单的栗子:

var v='Hello World'; 
(function(){ 
  alert(v); //undefined
  var v='I love you'; 
})() 

变量提升:

预编译期声明变量不赋值
执行期赋值

(function() {
    var a = 'One';
    var b = 'Two';
    var c = 'Three';
})()
等价于
(function() {
    var a, b, c;
    a = 'One';
    b = 'Two';
    c = 'Three';
})()

函数提升

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

函数表达式

var a=function(){}

函数声明式

function a(){})

重点:只有"函数声明形式"才能被提升。

函数声明:
function myTest(){ 
  foo(); //这里成功
  function foo(){ 
    alert("我来自 foo"); 
  } 
} 
myTest(); 
函数表达式:
function myTest(){ 
  foo(); //foo is not a function
  var foo =function foo(){ 
    alert("我来自 foo"); 
  } 
} 
myTest(); 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • **一.案发现场 **我们先看一段很简单的代码: var v='Hello World'; alert(v); 这...
    抓住时间的尾巴吧阅读 3,352评论 0 0
  • 概念 首先,看这篇文章之前确保你已经理解了js作用域。其次要补充,js在运行的时候,会优先加载当前作用域下的变量。...
    jacklin1992阅读 4,516评论 1 7
  • 从别人给我的一道题目说起,请问执行下面语句后的输出结果 我最初的答案是: 其实应该是 这道题包含了了函数提升与变量...
    superzdd阅读 4,055评论 0 5
  • 变量提升: 使用var声明的变量(包括函数)其声明会被提升到方法体最顶部,而赋值不会被提升;未使用var声明的变量...
    Venvivo阅读 1,828评论 1 0
  • 忽远忽近的臆想,渐渐潮湿,身后的脚印是深是浅,是直是弯,早已被历史记载,不能更改,阳光摇摇晃晃着在蒸腾似水的日子,...
    陈北牧阅读 1,216评论 0 1

友情链接更多精彩内容