以下是代码:
(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,但是返回的错误并没有明显。
答案 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”指的是像你这样的全局函数中的“窗口”。