百科问答小站 logo
百科问答小站 font logo



关于下面这段代码的报错是怎么个过程? 第1页

  

user avatar   rednaxelafx 网友的相关建议: 
      

在执行阶段报错。

题主这个问题还不需要关心编译的过程。这段代码编译是没问题的,唯一要留意的是变量提升(

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!      

问题解决。




  

相关话题

  JavaScript处理一个100M的超大xml,跑不出来以至于IE未响应怎么办? 
  为什么 JS 不能绕过后端代码直接调数据库,有哪些后端处理的逻辑,JS 不能写? 
  有多大比例的前端工程师,能在合理的时间内独立开发出一个足以供商业网站使用的文本编辑器? 
  《阮一峰版快速排序完全是错的》一文是否存在事实错误? 
  用 Canvas 实现虚拟列表的难点在哪里? 
  大公司实习经历对下一份工作能带来多少帮助? 
  为什么 TypeScript 有泛型而 PHP 却没有? 
  为什么 TypeScript 有泛型而 PHP 却没有? 
  网上常能见到的一段 JS 随机数生成算法如下,为什么用 9301, 49297, 233280 这三个数字做基数? 
  Golang、Kotlin、C#、JS、Python等都有协程,市面上的协程有什么本质上的区别? 

前一个讨论
如何提升ASP.NET网站首次打开速度?
下一个讨论
为什么坐火车要付钱?





© 2025-06-20 - tinynew.org. All Rights Reserved.
© 2025-06-20 - tinynew.org. 保留所有权利