zik*_*zik 2 javascript variables
不确定这是否被认为是最佳实践,或者你是否应该这样做但我有一小块Javascript我想知道你是否可以声明一个变量,显示该变量然后重新分配它并再次显示它?从语法上看,这似乎是正确的,但我认为这不是最佳做法,应该避免吗?
注意:我没有写这个块我只是想知道它是否正常,或者我是否应该更改它并使用下面的2个变量代码:
var u1 = 'something';
if (u1.indexOf('Accept') > 0)
{
var URL = 'some URL';
document.writeln(URL);
URL = 'another URL';
document.writeln(URL);
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:谢谢你的答案,认为这有点愚蠢.:/
您可以根据需要多次更改变量的值.变量经常被重用,因此我们节省了内存资源.不是你使用它们的方式(因为这是一个最好在调用函数时直接提供常量字符串的例子),但想想一个我们甚至没有想到多个变量值赋值的日常例子.一个for循环:
for (var i = 0; i < 100; i++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在此循环变量中,为变量i分配了101次新值.这是一个相当明显的例子,我们根本没有想到这一点,但除此之外,我们可以有一组循环并更明确地重用相同的变量,并为它赋值很多次,如:
var counter = 0;
for(var item = GetLinkedListFirstItem(); item != null; item = item.Next)
{
counter++;
}
// other code...
counter = 0;
while (counter < 10 || someOtherCondition)
{
// do something else
}
Run Code Online (Sandbox Code Playgroud)
这可能是显式变量可重用性的一个更好的例子,其值的变化很多次并且用于不同的目的.
变量重用有时是不需要的/不需要的.那就是我们有一个有意义的变量名称isUserLoggedIn.很难将这些变量重用于其他目的,因为它会使代码无法维护.
通常重用的变量因此可能是迭代器(即i)或通常命名的变量而没有太多意义.或者具有更多通用名称(即.finished)的变量,可以在可以与此类变量名称关联的不同上下文中重用.
在某些情况下,即使查看代码看起来很完美,您也可能遇到问题.当你使用异步函数时就是这种情况,这在使用Ajax调用或时间延迟调用时经常出现(即setTimeout).请考虑以下代码:
var loaded = false;
$.ajax({
url: "...",
type: "POST",
success: function(){
loaded = true;
}
});
if (loaded === true)
{
// do something important
}
// ok loaded not used any more, so we can reuse it
// we can easily change its type from number to string or anything else
loaded = "Peter loaded his gun";
Run Code Online (Sandbox Code Playgroud)
此代码有一个错误,因为不会执行重要的代码.永远!对于不理解异步性的不明智的开发人员来说,这是一个经常被误解的错误观念.
提示:当代码发出Ajax调用时,它不会等待响应,而是继续执行并执行
if语句.即使Ajax调用在0时间内响应,成功函数也不会执行,直到当前正在运行的代码无法完成执行.这就是Javascript的工作原理.排队代码执行.最后,当Ajax异步代码执行时,它最终将覆盖存储在变量中的字符串.