var i = somevalue 有什么区别;和变量 i;i = 某个值;
What are the differences between var i = somevalue; and var i; i = somevalue;
首先,如果之前有人问过这个问题,我深表歉意。我搜索了与我在这里要求的内容类似的东西,除了死胡同之外什么也没找到。
我正在审查一个项目的一些旧代码,我正在使用括号作为带有 JSLint 扩展的 IDE。在浏览我的代码时,它建议我更改类似于
for(var i = 0; i < somevalue; i++)
自
var i;
for(i = 0; i < somevalue; i++)
这促使我问:从性能方面、编码标准方面等方面,这两个声明之间有什么显着差异吗?
感谢您的任何答案或线索!
JSLint 实际上要求你将变量声明移动到函数范围的顶部:
function myfunction() {
var i,
j,
k;
// other code
for (i = 0; i < 100; i=i+1) { //another JSLint Recommendation: Don't use ++
for (j = 0; j < 100; j=j+1) {
for (k = 0; k < 100; k=k+1) {
console.log(i);
console.log(j);
console.log(k);
}
}
}
}
原因是变量在 JavaScript 中具有函数级范围。如果我在i
的for
循环中声明"j",它将被"提升"到函数的顶部,并且实际上存在于整个函数中,而不仅仅是在for
循环中。
JSLint 提出这个建议是因为无论如何,这就是幕后发生的事情,如果你不期望是这种情况,你可能会感到粗鲁的惊喜。
考虑以下 2 个函数
function test1(){
//code block 1
for(var i = 0; i < somevalue; i++)
//code block 2
}
function test2(){
//code block 1
var i;
for(i = 0; i < somevalue; i++)
//code block 2
}
在这两种情况下,定义都被提升,编译器首先定义变量。编译器像这样重新排列代码,
function test(){
var i; //and other definitions
//code block 1(without definitions)
for(i = 0; i < somevalue; i++)
//code block 2(without definitions)
}
因此没有区别。
var i
将变量 i 绑定到本地上下文。如果不执行 var i,则全局定义变量。
您应该始终只在一个地方使用 var,至少这是最佳实践。此外,每个变量只能使用它一次
所以
for(var i = 0;i<10;i++)
很好,但是
for(var i = 0;i<10;i++)
for(var i = 0;i<10;i++)
不好更好会是
for(var i = 0;i<10;i++)
for(i = 0;i<10;i++)
但如果你这样做
var i;
for(i = 0;i<10;i++)
与否完全取决于你
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 在javascript中,在变量名之前使用var有什么区别/优势吗
- 有什么区别!!变量和变量
- 使用变量self与this之间的区别
- 标识符和变量之间的区别(在 JavaScript 中)
- var i = somevalue 有什么区别;和变量 i;i = 某个值;
- 是否将函数分配给变量的区别
- Javascript & JQuery:$x 和 x 作为变量声明有什么区别?
- 声明有和没有原型的变量有什么区别
- 使用 ng-model 定义变量之间的区别,而不是通过 AngularJS 中的控制器定义变量
- 使用Javascript,变量赋值上下文中的表达式与上下文外的表达式有什么区别
- Javascript私有变量和参数有什么区别
- javascript属性和javascript变量有什么区别
- JS-使用||分配条件变量的区别或优势
- AngularJs中用方括号和花括号声明变量有什么区别
- 使用[]初始化javascript变量和使用{}初始化变量有区别吗?
- 从函数返回内部变量和直接返回值之间有区别吗?
- 定义变量时带$和不带$有什么区别?
- 在{}和link中为angular指令定义独立作用域变量的区别
- “test”和“test”有什么区别?Javascript变量和"#test"变量可以将var ja