码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript基础函数体中的唯一var模式(002)

时间:2014-09-12 23:29:34      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   使用   java   ar   strong   div   问题   

全局变量是不好的。所以在声名变量的时候,应该采用函数体中的唯一var模式(Single var Pattern)。这个模式有不少好处:

  • 提供了一个唯一的地方来查看函数体中声名的变量
  • 在使用一个变量之前总是先声名,这样未初始化的变量都会被赋值为undefine
  • 让你记得要声名变量。:-)
  • 代码更简洁(因为把多个var变成了一个)

说来也简单,这个模式就是在函数体的最初,用一个var声名所有本地变量(local variable)。

function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
 

// 函数体...
}

 

下面说一个Javascript函数中本地变量声名中的一个常见问题:Hoisting。Hoisting可以理解为变量声名在函数内“提起”。为了解释这一现象,看看下面的代码:

// antipattern
myname = "global"; // global variable
function func() {
    alert(myname); // "undefined"
    var myname = "local";
    alert(myname); // "local"
}
func();

 在函数中第一次使用的myname本来是想调用全局变量,但得到的结果却是undefined,因为Javascript允许在任何地方重复使用var声 名变量,而在函数体中间内使用var声名变量时,效果与在函数体最初声名是一样的,但声名是声名了,却还没有初始化,这才出现了undefined的情 况。所以上面的代码与下面的效果相当:

myname = "global"; // global variable
function func() {
    var myname; // same as -> var myname = undefined;
    alert(myname); // "undefined"
    myname = "local";
    alert(myname); // "local"
}
func();

 

JavaScript基础函数体中的唯一var模式(002)

标签:blog   http   io   使用   java   ar   strong   div   问题   

原文地址:http://www.cnblogs.com/Bryran/p/3969293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!