在Firefox中,当我尝试(甚至在firebug cosnole中的任何地方)时,我会得到奇怪的行为
function supports_local_storage() {
try {
return 'localStorage' in window && window['localStorage'] !== null;
} catch(e){
return false;
}
}
var localStorageEnabled = supports_local_storage();
if (!localStorageEnabled) {
alert('am in');
console.log('am in');
var localStorage = localStorage;
};
localStorage.setItem("textsfff", "20");
.. 如果在firefox中启用了localStorage,那么没有调出警报/控制台日志,但是localstorage会被unknow进程破坏,所以setItem失败。
如果我重写
var localStorage = localStorage;
到
localStorage = localStorage;
代码奇迹般地起作用,就像" var localstorage"存在于代码中的任何地方,即使条件不满足。
我在firefox 29.0.1中遇到此问题
我无法使用
localStorage = localStorage;
因为在控制台模式下我必须自己定义localstorage并需要" var declaration"。
答案 0 :(得分:2)
当" var localstorage"删除它就像localstorage一样。存在于代码中的任何地方,即使条件不满足。
localStorage
对象位于全局范围内,并且是window
对象的属性。如果您使用var localStorage
,那么您将无法再从该范围访问全局localStorage
对象 - 除非您使用window
前缀,如下所示:
window.localStorage.getItem(..);
确实如此,即使您的条件未得到满足,因为所有var
声明都被提升到当前范围的顶部,而不管任何条件语句。代码相当于:
var localStorage;
if(!localStorageEnabled){
localStorage = localStorage; // this is undefined
}
因此,当您执行var localStorage = localStorage
时,声明但未定义局部变量localStorage
,在当前作用域的顶部,然后您将undefined
分配给本地localStorage
}}。这就是localStorage = localStorage
在没有var
的情况下工作的原因,因为没有var
它就会找到全局对象。
我无法使用
localStorage = localStorage;
因为在控制台模式下我必须自己定义localstorage并需要" var declaration"。
在这种情况下,您可以在存在/启用localStorage时使用window
前缀。
var localStorage = window.localStorage;