从全局定义的函数访问函数范围链
Access function scope chain from a globally defined function
function globalFunc1() {
console.log(hello);
}
function globalFunc2() {
var hello = 'hello';
globalFunc1(); // expected to print "hello" but `hello` is undefined instead
}
globalFunc2();
如果不将内部变量传递给globalFunc1()
,这是否可行?我目前正在使用以下技巧来实现我想要的,但它太黑客化和不优雅了。
function globalFunc2() {
var hello = 'hello';
eval('(' + globalFunc1.toString() + ')()');
}
编辑:
我实际上正在寻找Javascript的一些类似于Function.prototype.bind
,.call
或.apply
的功能来实现我想做的事情。
详细说明我在做什么:
function checker() {
if (someVar == 'some value') {
/* ... */
}
}
setTimeout(function() {
var someVar = 'some value';
/* ... */
checker();
}, 1000);
您可以将globalFunc1
移动到 globalFunc2
内部,这样它就可以访问后者的内部变量,但将其分配给全局变量以允许从外部调用它:
function globalFunc2() {
window.globalFunc1 = function() {
console.log(hello);
};
var hello = 'hello';
globalFunc1(); // will print "hello"
}
globalFunc1(); // will print "hello"
在这里,globalFunc1
是在globalFunc2
内部定义的,因此可以访问其闭包中的变量,在这种情况下hello
。但是,它本身是一个全局变量,允许从外部访问它。
就您提出问题的方式而言,当(并且仅当(该全局定义的(也许应该说"声明"(函数指向另一个函数作用域内的函数时,您可以"从全局定义的函数访问函数范围链"。
无论你做什么,都不要做你eval
事。你在那里做的本质上是通过词法复制来定义(然后立即执行(函数。与其这样做,为什么不像上面那样在那里编写函数呢?
相关文章:
- javascript函数访问ios本机功能
- 从嵌套函数访问函数属性
- 将typescript函数访问到angular中
- 全局变量只能由第一个函数访问
- Javascript从匿名函数访问外部对象属性
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 在jQuery中,我如何从$.ajax回调函数访问$(this)
- 如何在JavaScript中停止从特定函数访问某些函数和变量
- 从jQuery.ech()函数访问外部作用域
- Angular2/Typescript:从链接可观察函数访问实例变量
- 局部变量仍可通过函数访问
- 从Kendo中的columns.filterable.cell.template函数访问列字段名
- 可以't从JS函数访问combodate
- 如何在javascript中将变量从一个函数访问到另一个函数
- jQuery从PHP函数访问Ajax响应
- 如何从json函数访问javascript中的基类变量
- 在OPP JS中,您可以从构造函数访问原型函数内部声明的方法
- Javascript 使用函数访问其他类
- 从 JavaScript 中的私有函数访问公共函数
- 为什么我无法从茉莉花中的 javascript 函数访问全局变量