2015-05-29 32 views
0

在考慮以下代碼:隔離JS相同的HTML文檔

<script>var foo = 'bar';</script> 
<div id='isolated'> 
    <script>console.log(foo)</script> 
</div> 

這將返回'bar'到控制檯。不過,我希望foo#isolated之外聲明的任何其他變量爲undefined

這是如何實現的?跨瀏覽器,輕量級和本機解決方案將是更可取的。

+0

也許可以查看https://github.com/asvd/jailed或https://github.com/谷歌/卡哈。谷歌「在瀏覽器js沙箱」。 –

+0

不要像這樣混合你的JS和html代碼。保持它們分開。 –

回答

3

這不是JavaScript的工作原理。由於HTML元素塊,它不會自行確定範圍。

您在全局範圍聲明foo,只需將其聲明在僅在需要時才使用的範圍內。使用ES6(和諧),使用let而不是var(建議,不完全支持)來聲明變量提出一個塊級變量而不是全局作用域變量。

然而,JavaScript並不知道foo被記錄在隔離的div內部,除非你使用了一些邏輯。

1

嘗試將代碼封裝在函數中的第一個<script></script>標記之間。

<script>(function fn(){var foo = 'bar';})();</script> 
<div id='isolated'> 
    <script>console.log(foo);</script> 
</div> 

這將導致您聲明的任何變量在此函數的上下文中生存。除此功能外,他們無法訪問。

+0

然而,這將工作,但在問題的上下文中,「foo」不再可以在任何地方訪問,而不是在隔離的div內。 –