如果使用它,“use strict”会使我的 CasperJS 测试崩溃

Posted

技术标签:

【中文标题】如果使用它,“use strict”会使我的 CasperJS 测试崩溃【英文标题】:"use strict" makes my CasperJS test crashing if using this 【发布时间】:2013-01-19 07:15:36 【问题描述】:

代码如下:

(function() 
    /*global casper:true */
   "use strict";

   this.run = function(casper) 
       // code test here
   ;

   this.run(casper);
)();

casperjs test myfile.js 返回:

TypeError: 'undefined' is not an object (evaluating 'this.run = function(casper) 

   ')
#    type: uncaughtError
#    error: "TypeError: 'undefined' is not an object (evaluating 'this.run = function(casper) \n       \n   ')"

如果我删除“use strict”,它只会挂起(预期的行为,因为此测试不完整)。我想围绕 use strict 有一条我不理解的规则,但返回的错误并不明显。

【问题讨论】:

【参考方案1】:

在严格模式下,this 将在这样的立即函数中未定义,而不是全局对象(没有严格模式)。使您的代码工作的一种方法是显式创建全局变量(如果这是您要寻找的):

window.run = function(casper) 
    // code test here
;
window.run(casper);

或者,如果您不是在寻找全局变量,只需在本地声明您的方法:

var run = function(casper) 
    // code test here
;

run(casper);

【讨论】:

【参考方案2】:

在严格模式下,“this”在不是对象方法的函数中无效。在非严格模式下,“this”指的是像你这样的全局函数中的“window”。

【讨论】:

以上是关于如果使用它,“use strict”会使我的 CasperJS 测试崩溃的主要内容,如果未能解决你的问题,请参考以下文章

编辑模式下的 UITableView - 按 Delete 会使我的应用程序崩溃

在 UILabel 上使用外观代理会使我的应用程序被拒绝,因为它会改变 UIAlertView?

在我的 OSGi 环境中安装新版本的 Groovy 会使我的包导入它,尽管它不应该

更改为横向会使我的 Android 应用程序崩溃

为啥这个旧的依赖会使我的 gradle 崩溃?

将 Oracle 的行大小设置得更高会使我的应用程序变慢?