为什么两个同名的变量在这种情况下不会发生冲突?

时间:2014-05-19 10:09:14

标签: javascript typeahead.js

我正在阅读typeahead.js documentation并找到了这段代码:

var states = ['Alabama', 'Alaska'];
//... more code
var states = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    // `states` is an array of state names defined in "The Basics"
    local: $.map(states, function(state) { return { value: state }; })
});

我无法理解为什么Bloodhound对象使用states数组并且它与states变量的后一声明不冲突?

除非是shouldn't work,否则我知道nested。但似乎并非如此。

我做了自己的实验:

var a = 3;
var a = function(){ alert(a + 2); }
a();

输出:function(){ alert(a + 2); }2证明它不起作用。

这是javascript的特点之一吗?

2 个答案:

答案 0 :(得分:1)

当该语句完成执行时,将重新分配该变量。在该语句中,变量仍具有旧值。这类似于a = a +1

答案 1 :(得分:1)

您尝试在将变量初始化为函数后访问变量a。 如果你尝试类似的东西,

var a = 10;
var a = {b: a+10}

你会看到a是,

{b: 20}

在重写之前访问states数组。