2

这是代码:

(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 有一条我不理解的规则,但返回的错误并不明显。

4

2 回答 2

3

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

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

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

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

run(casper);
于 2013-02-04T14:55:30.020 回答
1

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

于 2013-02-04T14:55:36.357 回答