摘要:我们知道,对于所有的变量,无论在函数体的什么地方声明,都会在后台被提升到函数体顶部。唯一需要引起注意的地方在于当适用函数声明时,函数定义也会被提升,而不仅仅是函数声明被提升。
我们知道,对于所有的变量,无论在函数体的什么地方声明,都会在后台被提升到函数体顶部。
这个规则对于函数同样适用,其原因在于函数只是分配给变量的对象。唯一需要引起注意的地方在于当适用函数声明时,函数定义也会被提升,而不仅仅是函数声明被提升。看下面的代码:
function test() { console.log(typeof foo); // "function" console.log(typeof bar); // "undefined" function foo() { } var bar = function () { }; } test();
test()函数中的foo和bar的声明被提升到了顶部;同时,需要注意的是:foo和bar的区别在于前者的定义得到了提升,而后者的定义没有提升,这也就是console.log(typeof bar)输出undefined的原因。
所以,需要记住的是:函数表达式仅仅是变量被提升,而函数的实现没有被提升。
上面的代码中,后台解析的代码类似于:
function test() { var bar; function foo() { } console.log(typeof foo); // "function" console.log(typeof bar); // "undefined" var bar = function () { }; } test();
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85712.html
摘要:什么是函数作用域下的变量提升和函数提升函数作用域中也存在变量提升和函数提升,这个和全局作用域下的情况是一模一样的,就是把作用域想成是全局的就可以了。 在js中有一部分比较难以理解,却也是在笔试过程中很容易考的,那就是变量提升和函数提升的问题,这篇文章我会就变量提升和函数提升的问题拓展一下有关js函数的知识点,包括作用域的问题,后面还会有一些小练习来判断自己是否真的搞懂了。 作用域 在j...
摘要:函数提升在里有两种方式创建函数,通过函数声明和函数表达式。函数声明用指定的参数来定义函数。提示不要在中进行函数声明。问题输出两个都是用函数声明的函数,将被提升到的局部作用域顶端。函数本身将作为函数声明在全局范围内提升。 作者关于提升的话题,总共有两篇。(后来又有一个讨论篇),再次搬过来。水平有限,如果翻译的不准确请包涵,并去看原文。下面开始: 这是我之前的关于提升的文章,标题为《用le...
摘要:所谓变量提升,提升就是为了事先声明变量。变量提升之后,但其赋值还是留在原本的位置等运行到了之后动态赋值,而函数提升之后直接相当于在代码里抽空了。搞明白这个例子也就搞懂了作用域中变量和函数是怎么提升的。 问题 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在这个例子中它应该输出什么?输出的结果是6。 showImg(h...
摘要:函数和变量相比,会被优先提升。这意味着函数会被提升到更靠前的位置。仅提升声明,而不提升初始化。 JavaScript 函数高级——执行上下文与执行上下文栈(图解+典型实例分析) 变量提升与函数提升 变量声明提升 通过 var 定义(声明)的变量,在定义语句之前就可以访问到 值:undefined /* 面试题 : 输出 undefined */ var a = 3 ...
摘要:要理解函数的提升行为,让我们先解析什么是的提升。也就是说声明提升了,赋值还留着原地,等待执行。声明被提升,而包括函数表达式的赋值在内的赋值操作并不会提升,而是留在原地等待执行。 javaScript自上而下执行的顺序受到很多新手和部分老手的共识,但是这其实并不完全正确,这涉及到js的编译过程,这方面我们稍后会聊到,先考虑下面代码: window.onload = function(){...
阅读 2039·2021-11-16 11:45
阅读 546·2021-11-04 16:12
阅读 1338·2021-10-08 10:22
阅读 823·2021-09-23 11:52
阅读 4096·2021-09-22 15:47
阅读 3493·2021-09-22 15:07
阅读 452·2021-09-03 10:28
阅读 1713·2021-09-02 15:21