下面这段itv报错代码1305 哪错了?

关于下面这段代码的报错是怎么个过程?
这样一段错误代码:var foo = {
fn1:function() {
fn2:foo.fn1()
想知道,这个报错的过程是在引擎编译过程中报错,还是在执行阶段。再者想了解这段代码在预编译中变量的保存过程和代码执行的过程
在执行阶段报错。题主这个问题还不需要关心编译的过程。这段代码编译是没问题的,唯一要留意的是变量提升(),但在这里就算不看变量提升也不影响结果。题主原本的代码:(格式化一下)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
赋值表达式或者带初始化的变量声明都是,要在赋值符号的右手边的表达式求值完成之后,才会把右手边的值赋予左手边的表达式。而不是题主显然以为的:var foo
// foo is undefined now
foo.fn1 = function() { return 1; }
foo.fn2 = foo.fn1() // works!
问题解决。
R大解释很清楚了。要补充的是,尽管这个错误无论js的spec或是实际的引擎都是在运行时才报告的(因为要保持js的一贯偏向动态的特征,且允许引擎采取这样的优化——除了最简单的解析错误,还没有执行到的函数可以根本不管——而有些库甚至依赖这样的特性,比如像老赵的windjs可在运行时编译就有赖于此);但是就此个案来说,完全可以通过静态分析(如lint工具)发现这个错误。
已有帐号?
无法登录?
社交帐号登录这段代码错在哪了-爱福窝装修论坛
这段代码错在哪了
其它类似问题
这段代码错在哪了下面这段代码为什么错了?_百度知道请问下下面这段C语言代码错在哪_百度知道下面这段代码错在哪里?_百度知道

我要回帖

更多关于 itv报错代码1305 的文章

 

随机推荐