这是我对requirejs的首次尝试,我认为我对此有一个很好的处理,但以下情况除外:为什么模块中定义的函数无法访问require()内的局部变量,我该如何实现?
如果我们能专注于问题,而不是我使用eval(),更好或替代的方法来定义test()或以下代码中可能存在的错字的事实,将不胜感激。
在全局名称空间中给出以下代码:
require(["test"], function(testModule) {
var test1 = testModule.test1;// same as local test()
var test2 = testModule.test2; // modified to work as module
//local function same as testModule.test1
function test (name, test){
return test+'='+eval(name+test);
}
//define class & instance for testing
var MyClass1 = function (name) {
this.name = name;
};
var mc1 = new MyClass1('instance 1');
var objName = 'mc1'
test(objName, '.name'); // works as expected
test1(objName, '.name'); // error: mc1 is not defined
test1.call(this, objName, '.name'); // error: mc1 is not defined
test2(mc1, objName+'.name'); // works as expected
})
和测试模块定义:
define({
test1: function (name, test){
return test+'='+eval(name+test);
},
test2: function (obj, test){
var parts = test.split('.');
parts[0] = 'obj';
test = parts.join('.');
return test+'='+eval(test);
}
});
问题:
部分a)当我调用test1(objName,'.name')时,为什么看不到定义为var mc1 = new MyClass1('instance 1')的局部变量?
我知道这是出于良好的原因,与保持全局名称空间整洁有关,我只是不了解它如何看不到它。define()的this指向与require()的this相同的名称空间。
b)如果我想让测试模块访问var mc1,我该怎么做?
当我调用test1(objName,'.name')时,为什么看不到定义为var mc1 = new MyClass1('instance 1')的局部变量?
它们在不同的功能中定义。这是行不通的相同原因:
function a() {
var hello = 'world'
b()
}
function b() {
alert(hello)
}
如果我想让测试模块访问var mc1,我该怎么做?
将定义更改为:
test1: function (name, test, mc1){ ... }
并显式传递mc1变量:
test1(objName, '.name', mc1)
这与require.js无关,这就是javascript的工作方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句