哪一种定义变量的方法更好?为什么?
What's way to define variable is better and why?
第一种方式:
var a = 0;
setTimeout(DoSomething(a), 1000);
function DoSomething(a) {
a = $(window).width();
}
第二种方式:
setTimeout(DoSomething, 1000);
function DoSomething() {
var a = $(window).width();
}
哪一种方法更好?
您打算以后再次使用"a"作为参考吗?
在函数内部创建的变量只存在于该函数内部。一旦该函数完成,它将被销毁。
function something(){
var a = 1;
}
alert(a);
//This will trigger an alert box with nothing in it, or 'undefined'
在任何函数之外创建变量都会使其成为全局变量。全局变量可以被任何其他函数访问和设置。
var a;
function something(){
a = 10;
}
alert(a);
//This will trigger an alert box with '10' being displayed
所以这真的取决于你是否想要再次使用在该变量中设置的数据,或者如果它是一个"一次性"使用变量
Javascript是函数作用域,所以在第一种方式中,a
是全局定义的,而在第二种方式中,它是在函数DoSomething
的作用域中定义的。还要注意,在第一个方法中,您错误地调用了DoSomething
。不是在超时之后调用它,而是立即调用它,并将它的结果(在本例中什么都没有)作为函数参数输入传递给setTimeout。正如Hogan在评论中所说,您需要setTimeout(function () { DoSomething(a); }, 1000);
一般来说,应该避免在全局作用域中定义变量,而应该尝试在函数中定义它们。您可以使用jQuery在文档就绪时执行此操作:
$(function() {
var a;
var DoSomething = function() {
a = $(window).width();
}
setTimeout(DoSomething, 1000);
};
两者都可以,重要的是范围和上下文。如果您需要变量a
不仅可以被函数访问,还可以使用第一个示例。如果您只希望a
对函数可用,并且只有该函数可用,则第二种方法是正确的。
您需要了解变量作用域,以便更好地理解这两种情况的区别。
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 为什么 +str 在 JS 中比 str*1 更好地将字符串转换为数字
- IE与我的javascript后台更改代码配合得更好.为什么?
- 为什么将 JSON 对象存储在 cookie 中比字符串更安全或更好
- 匿名函数与命名函数哪个更好,为什么
- 标题大小写一个句子 - 哪个解决方案更好,为什么
- 为什么这个jQuery显示/隐藏切换有效,以及我如何使它变得更好
- SetTimeout -为什么传递函数比传递字符串更好
- lang . isundefined vs . typeof undefined,哪个更好,为什么?
- 性能方面,算法复杂性方面,下面两个JS函数中哪一个用于将字符串的第一个字母大写更好,为什么?
- 为什么Angular JS中的依赖项注入比手工管理依赖项更好
- 为什么requestAnimationFrame比setInterval或setTimeout更好
- 为什么要在数组上使用排序映射.在某些情况下如何更好
- 哪个更好,为什么
- 哪一种定义变量的方法更好?为什么?
- 为什么属性初始化为null的对象数组处理得更好
- 这些原型声明中哪一个更好,为什么?