Ajax 板


LINE

我觉得原 PO 的问题可能不是 hoisting,而是不知道 test = ... 会把 function test 覆盖掉。不过这篇还是讲 hoisting。 Hoisting 这个「行为」是被人「观察」出来的。以 C 为例子︰ #include <stdio.h> int a = 1; int main() { printf("%d\n", a); int a = 2; printf("%d\n", a); } 得到的结果会是 1 2 但在 JavaScript 中 var a = 1; function main() { console.log(a); var a = 2; console.log(a); } main(); 得到的结果是 undefined 2 人们就给出一套解释︰「以 var 定义的变数,会被提到 function scope[1] 的最上面, 而且初始值是 undefined。并且会等到原本的位置(a = 2)才会赋值」,称为 「Hoisting」。(其实这个说法是错的,在定义 var 时并所谓的「初始值」并不一定是 undefined,可能该变数本来就在 scope 内,或是被 function arguments 赋值) [1]: 关於 scope: https://is.gd/tcHqDy 事实上 JS 做的事情是︰在进入一个新的 scope 的时候,会把 var, function, const, let 的变数收集起来,并且把变数名称注册到目前的 scope 中,接着才开始执行 接下来的程式码。 它们之前的差别︰ var 是丢到 function scope,并且可以重覆定义,在未赋值前存取会得到 undefined。 function 也是丢到 function scope,可以重覆定义。若定义是放在 scope 的最外层 (定义位於 function scope 底下,而且不在任何 block scope 内),则会提前赋值, 所以你可以在 function 定义前就使用这个变数。否则就和 var 相同,在未赋值前存 取会得到 undefined。 const 和 let 是丢到 block scope,不能重覆定义,在还未赋值前存取会 ReferenceError。 const 还有一个限制是不能重覆赋值。 至於 const, let 也有 hoisting 现象,解释为「将定义提升到 block scope 的最上 方,但若提前存取会丢出 ReferenceError」,并使用 temporal dead zone 的概念。 要解释这个的话又和 function 的 default parameter 或 for, while 有关…… 这里解释得满清楚的︰ http://exploringjs.com/es6/ch_variables.html 如果看了这一堆还很有兴趣的话,可以玩这个︰ http://perfectionkills.com/javascript-quiz-es6/ -- ▆▄   --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.250.156.252
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1487517868.A.B84.html
1F:推 violet90079: 感谢指点~~JavaScript真的好深奥啊Orz 02/19 23:58
2F:推 MangoTW: 推精辟解析 02/20 00:25
3F:推 broo: 多谢解说!有了解一些了! 02/20 23:48
4F:推 kaidouya: 推 04/02 12:12
5F:→ eight0: 这篇文章也很清楚,虽然没有提到 function/for params 05/31 12:19







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP