如果使用它,“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?