首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈谈 JavaScript 声明提前(hoisting)

https://blog.csdn.net/FE_dev/article/details/68943341 有许多同学知道js在执行的时候,是从上到下,从左到右,一行一行执行的,但是不知道在这之前还要做一些事情...,js程序在正式执行之前,会将所有var 声明的变量和function声明的函数,预读到所在作用域的顶部,但是对var 声明只是将声明提前,赋值仍然保留在原位置,function 声明,会将函数名称和函数体都提前...//声明提前 console.log(a);//undefined a=100; //赋值任然留在原位置 console.log(a);//100 注意1: 声明提前仅能将声明提前到所在作用域的顶部...console.log(a); //100 }; fn(); console.log(a); //报引用错误 注意2: 函数声明提前不同于 var 变量声明提前,使用函数声明语句,函数名称和函数体均会被提前...("a"in window)) { var a = 1; }; var a; alert(a); 解析3: 首先说一句,在浏览器,var声明的全局变量是属于window对象的属性。

63520
您找到你想要的搜索结果了吗?
是的
没有找到

JS 声明

声明和未声明变量之间的差异是: 声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的。...变量提升 由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码的任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做“hoisting”。...let let不会在全局声明时(在最顶部的范围)创建window 对象的属性。 let允许你声明一个作用域被限制在 块级的变量、语句或者表达式。...作用域规则 let声明的变量只在其声明的块或子块可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数。...该变量处在一个自块顶部到初始化处理的“暂存死区”。 所以说变量一定要先声明, 后使用.

2.5K10

初探JavaScript(四)——作用域链和声明提前

正文   截止上一篇关于Javascript的博文《初探JavaScript(三)——JS带我"碰壁"带我飞》已经写了三篇。...今天首先介绍下Javascript的函数作用域的概念,然后了解下什么是作用域和声明提前,最后通过一个例子剖析Javascript的作用域链。...如果在函数f()声明一个局部变量也为g,则全局变量就会被局部变量覆盖 ? 2.作用域和声明提前   看到Javascript作用域这块,可以说颠覆了以前我对作用域的认识。...对于“变量在声明他们的函数体以及这个函数体嵌套的任意函数体内都是有定义的”这句话的延伸理解:变量在声明之前就已经可用。我们称这种特性为声明提前,也就是函数里的所有变量都被“提前”至函数体的顶部。...3.作用域链 全局变量在程序始终是有定义的,局部变量在声明它的函数体内以及其所嵌套的函数内始终是有定义的。

69450

JS函数声明与函数表达式的异同

-- function body --> } 函数声明提前 函数声明是在预执行期执行的,就是说函数声明是在浏览器准备执行代码的时候执行的。....'); } ECMAScript规范中表示,函数声明语句可以出现在全局代码,或者内嵌在其他函数,但是不能出现在循环、条件判、或者try/finally以及with语句中。...当然是声明提前了。...; })() 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际,它们还是会有差异的,具体表现在,

1.1K50

JS函数声明与函数表达式的不同

Js的函数声明是指下面的形式: function functionName(){ }         这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName...= function(){ }         可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用貌似也都是可行的,那他们有什么差别呢?       ...事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际,它们还是会有差异的,具体表现在,...当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。

1.4K20

JavaScript基础-JS输出与变量声明

在JavaScript学习之旅,掌握基本的输出方式和变量声明是每位开发者必经的第一步。...本文旨在深入浅出地介绍JavaScript的输出语句及变量声明的基础知识,同时指出一些常见的问题与易错点,并提供避免错误的方法,附上实用的代码示例,帮助初学者构建坚实的基础。...一、JS输出:console.log的艺术 基础用法 在JavaScript,console.log()是最常用的输出函数,用于在浏览器的控制台打印信息。...易错点2:过度依赖var 由于历史习惯,一些开发者可能仍然偏好使用var,但在现代JavaScript编程,let和const通常更优。...记住,实践不断反思和总结是提升编程技能的不二法门。希望本文能为你铺平JavaScript学习之路,让你的代码之旅更加顺畅。

12010

微公司发布“澄清声明”:美籍高管提前获知禁令、抱团减持说法是刻意误导!

10月26日消息,近期有网络媒体报道称,“以微公司董事长尹志尧为代表的一众美籍高管在美国新对华制裁出台前就得到了消息,因此提前抱团减持股票,套现了数千万美元”。...对此,微公司昨日晚间通过官方微信公众号发布“澄清声明”进行了回应。...微公司在澄清声明当中表示,“公司管理层一贯严格遵守各项法律法规,在三年锁定期结束后的减持完全符合监管要求,且实际减持数量远低于可减持额度;所谓公司美籍人士有提前获知美国出台新出口管制条例的信息优势、抱团减持等说法不符合客观事实...至于是否有人提前了解到了一些风声,这个完全属于“猜测”,并没有事实依据支持。而且从减持计划的实施来看,相关高管的实际减持数量来看,也远低于此前披露的可减持额度。...对此,微公司董秘回应称:“目前董事长及管理团队正常履职。” 而此次微公司在最新的“澄清声明”当中也强调,“公司产品研发、生产营运和市场销售均一切正常”。

28520

JS学习系列 07 - 标签声明(Label Statement)

提前剧透,不加括号这里会报错哦)。 接着往下看,当你读完这篇文章的时候,心中的疑惑会完全解开。 2....当 a > b 的时候,由于goto语句的作用,就会跳过 print("hello"),直接跳到 aa 标签声明的代码块,打印字符 "s",然后结束。...这就引出了今天的主题:Label Statement,它就是 JS 的 goto 语句。 3. 用法 首先明确一个原则,在JavaScript,语句优先。...也就是说,如果一段代码既能够以语句的方式解析,也能用语法的方式解析,在JS,会优先按语句来解析。 { a : 1 } 复制代码 上面这段代码,在JS的执行结果是什么呢?...当然,这种写法是完全不提倡的,这里只是用来说明JS的Label Statement这个特性,大家千万不要这样写代码。

2.8K20

JS学习系列 07 - 标签声明(Label Statement)

提前剧透,不加括号这里会报错哦)。 接着往下看,当你读完这篇文章的时候,心中的疑惑会完全解开。 2....这就引出了今天的主题:Label Statement,它就是 JS 的 goto 语句。 3. 用法 首先明确一个原则,在JavaScript,语句优先。...也就是说,如果一段代码既能够以语句的方式解析,也能用语法的方式解析,在JS,会优先按语句来解析。 { a : 1 } 上面这段代码,在JS的执行结果是什么呢? 大家思考2分钟.......我换一个写法: { a : 1 } 相信有的同学已经明白了,在JS,{}既可以代表代码块,又可以作为Object的语法标志。...当然,这种写法是完全不提倡的,这里只是用来说明JS的Label Statement这个特性,大家千万不要这样写代码。

15410

JS 的函数表达式和函数声明你混淆了吗?

但是sumB是使用函数表达式创建的(将其包装在括号),该函数表达式不会在当前作用域内创建函数变量。 如果你想访问使用函数表达式创建的函数,那么将函数对象保存到一个变量: // Works!...2.函数声明 在前面的示例已经看到的,sumA是一个函数声明: // Function declaration function sumA(a, b) { return a + b; } sumA...(4, 5); // => 9 当一个语句包含function关键字,后跟函数名称,一对带参数的括号(param1, param2, paramN)以及包围在一对花括号{}的函数主体时,就会发生函数声明...函数声明会创建一个函数变量:一个与函数名称同名的变量(例如,上一个示例的sumA)。 在当前作用域中(在函数声明之前和之后),甚至在函数作用域本身内,都可以访问该函数变量。...: 如果表达式的函数没有名称,例如 function(){return 42},那是一个匿名函数表达式 如果函数具有名称,例如 上一个示例的sumB和回调,那么这是一个命名函数表达式 3.1 函数表达式的注意事项

72930

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券