"使用严格"如果使用它,我的CasperJS测试会崩溃

时间:2013-02-04 14:52:05

标签: javascript casperjs use-strict

以下是代码:

(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,但是返回的错误并没有明显。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

run(casper);

答案 1 :(得分:1)

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