Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JS与同一HTML文档中的其他JS隔离_Javascript_Namespaces_Isolation - Fatal编程技术网

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>