javascript-如何从堆栈顶部执行JS函数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-如何从堆栈顶部执行JS函数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1562字,纯文字阅读大概需要3分钟。
内容图文
![javascript-如何从堆栈顶部执行JS函数?](/upload/InfoBanner/zyjiaocheng/671/85fe70d6ab3d4190a2e59e15c08f542d.jpg)
我想从堆栈的顶部执行一个函数.也就是说,任何用“ var”定义的变量都应在全局意义上进行定义.这可能吗? fn.call(窗口)不起作用.
<script>
var foo = "I am top level foo.";
var fn = function(){
var foo = "Setting foo from in a function";
}
fn.call(window); //doesn't work, var is still set locally in fn.
alert(foo); //desired effect will alert "setting foo from in a function"
</script>
请注意:我完全知道,不指定“ var”会使项目成为全局变量.问题是我无法指定“ fn”的内容,它是用户定义的,但是希望从顶层运行.
我愿意在必要时使用eval.
解决方法:
我不确定您要做什么,但是您不能以这种方式覆盖foo的值.在全局上下文中指定var foo时,它会附加到全局对象(在全局范围内).
然后在函数中指定var foo时,就在该函数的范围内对其进行了声明.这意味着外界对此是未知的.您可以做的是这样的:
var fn = function() {
this.foo = "Setting foo from in a function";
};
或者更明确地说:
var fn = function() {
window.foo = "Setting foo from in a function";
};
这是你想要的吗?
当您在函数内部定义foo时,它将附加到Activation对象而不是Global对象.每次输入函数的执行上下文时,都会创建一个新的Activation对象.因此,每次调用该函数时,都会得到一个新的foo.同样也可以,否则您将无法创建在函数作用域内局部的变量.它们会渗入全球环境.
更新
我想如果您确实想在全局上下文中评估函数中的代码,则可以执行以下操作.这很丑陋,我不确定您为什么要这么做,但是这里有:
var foo = 2;
var fn = function() {
var foo = 3;
}
console.log(foo); //prints 2
var fnSource = fn.toSource();
eval(fnSource.replace(/^\(function\s*\(\)\s*{/, "").replace(/}\s*\)$/, ""));
console.log(foo); //prints 3
这将删除(函数(){和}),以便最终只在中间提供代码,然后运行eval.
再次强调,我不建议您这样做.
内容总结
以上是互联网集市为您收集整理的javascript-如何从堆栈顶部执行JS函数?全部内容,希望文章能够帮你解决javascript-如何从堆栈顶部执行JS函数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。