Javascript 将JS与同一HTML文档中的其他JS隔离
考虑以下代码:Javascript 将JS与同一HTML文档中的其他JS隔离,javascript,namespaces,isolation,Javascript,Namespaces,Isolation,考虑以下代码: <script>var foo = 'bar';</script> <div id='isolated'> <script>console.log(foo)</script> </div> var foo='bar'; console.log(foo) 这将把'bar'返回控制台。但是,我希望foo和在之外声明的任何其他变量从它内部被隔离 如何做到这一点?最好是跨浏览器、轻量级和本地解决方案 Ja
<script>var foo = 'bar';</script>
<div id='isolated'>
<script>console.log(foo)</script>
</div>
var foo='bar';
console.log(foo)
这将把'bar'
返回控制台。但是,我希望foo
和在之外声明的任何其他变量从它内部被隔离
如何做到这一点?最好是跨浏览器、轻量级和本地解决方案 JavaScript不是这样工作的。由于HTML元素块的原因,它不确定自身的作用域
您在全局范围内声明foo
,只需在范围内声明它仅在需要时使用即可。使用ES6(和谐),使用let
而不是var
(建议使用,不完全支持)来声明变量,建议使用块级变量而不是全局范围变量
然而,JavaScript不知道foo
被记录在隔离的div中,除非您使用一些逻辑。JavaScript不是这样工作的。由于HTML元素块的原因,它不确定自身的作用域
您在全局范围内声明foo
,只需在范围内声明它仅在需要时使用即可。使用ES6(和谐),使用let
而不是var
(建议使用,不完全支持)来声明变量,建议使用块级变量而不是全局范围变量
但是,JavaScript不知道foo
是否被记录在隔离的div中,除非您使用一些逻辑。尝试将代码包装在函数的第一个
标记之间
<script>(function fn(){var foo = 'bar';})();</script>
<div id='isolated'>
<script>console.log(foo);</script>
</div>
(函数fn(){var foo='bar';})();
console.log(foo);
这将导致您声明的任何变量都存在于该函数的上下文中。在此函数之外将无法访问它们。尝试将代码包装在函数中第一个
标记之间
<script>(function fn(){var foo = 'bar';})();</script>
<div id='isolated'>
<script>console.log(foo);</script>
</div>
(函数fn(){var foo='bar';})();
console.log(foo);
这将导致您声明的任何变量都存在于该函数的上下文中。在该函数之外将无法访问它们。如果在iframe中加载隔离的代码,并将代码托管在不同的域中,则作用域将被分离。然后,您可以通过跨文档消息服务()在父级和iframe之间来回传递消息。如果您在iframe中加载隔离的代码,并将代码托管在不同的域中,则作用域将被分离。然后,您可以通过跨文档消息传递服务()在父级和iframe之间来回传递消息()可以查看或。谷歌“浏览器js沙盒”。不要像这样混合js和html代码。把它们分开。也许看看或者。谷歌“浏览器js沙盒”。不要像这样混合js和html代码。将它们分开。但是,在问题的上下文中,foo
不再可以在任何地方访问,而不是仅在孤立的div内。但是,在问题的上下文中,foo
不再可以在任何地方访问,而不是仅在孤立的div内。
<script>(function fn(){var foo = 'bar';})();</script>
<div id='isolated'>
<script>console.log(foo);</script>
</div>