在执行阶段报错。
题主这个问题还不需要关心编译的过程。这段代码编译是没问题的,唯一要留意的是变量提升(
variable hoisting),但在这里就算不看变量提升也不影响结果。
题主原本的代码:(格式化一下)
var foo = { fn1: function() { return 1; }, fn2: foo.fn1() // TypeError: Cannot read property 'fn1' of undefined }
这个代码可以等价看作拆解的形式:
var foo // foo is undefined now var tmp = { } tmp.fn1 = function() { return 1; } tmp.fn2 = foo.fn1() // TypeError: Cannot read property 'fn1' of undefined foo = tmp
赋值表达式或者带初始化的变量声明都是,要在赋值符号的右手边的表达式求值完成之后,才会把右手边的值赋予左手边的表达式。
而不是题主显然以为的:
var foo // foo is undefined now foo = { } foo.fn1 = function() { return 1; } foo.fn2 = foo.fn1() // works!
问题解决。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有