function MyFunction() {
closure = function() {
alert('my parent function name is: '/* now what here ? */);
}
closure();
}
MyFunction();
结果应为my parent function name is: MyFunction
(对版主:我不知道为什么stackoverflow阻止我发送这个问题,声称它不符合质量标准。我是否必须输入一些多余的文本才能发送它。)
答案 0 :(得分:3)
这是/ 可能,但它受到限制。第一个限制,并非所有Javascript引擎都支持以下模式,第二个(更具戏剧性), ES5严格模式也不支持它。
某些Javascript引擎允许您访问.__parent__
属性,该属性是对父作用域的引用。这看起来应该是
alert('my parent is ' + this.__parent__.name );
您必须在其中调用new closure()
,或者为该函数指定名称并使用该名称而不是this
。
但是,大多数实现都为了安全问题而删除了该访问权限。您可能已经注意到,您可以通过访问父上下文来破坏“全能”关闭安全性。
实现它的另一种方法是访问arguments.callee.caller
,这在 ES5严格模式中也无法访问。看起来像:
function MyFunction() {
closure = function f() {
alert('my parent function name is: ' + arguments.callee.caller.name);
}
closure();
}
MyFunction();
答案 1 :(得分:2)
function MyFunction() {
closure = function() {
alert('my parent function name is: ' + arguments.callee.caller.name);
}
closure();
}
MyFunction();
答案 2 :(得分:1)
function MyFunction() {
var functionName = arguments.callee.name,
closure = function() {
alert('my parent function name is: ' + functionName);
}
closure();
}
MyFunction();