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

标签 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 特性之一吗?

最佳答案

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

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

你会看到a是,

{b: 20}

状态数组在被覆盖之前被访问。

关于javascript - 为什么在这种情况下两个同名变量不会发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735007/

相关文章:

javascript - *ngIf 上使用的 Angular 4 构造函数值

javascript - Bootstrap Typeahead 渲染问题

twitter-bootstrap - Bootstrap 3 + typeahead.js 0.9.3。如果没有找到结果则提示

typeahead.js - twitter typeahead 显示所有可用值,而不仅仅是匹配值

jquery - 如何在 Angular Controller 中使用 Typeahead JS 定位 Bootstrap 模式

javascript - 也对树的子级应用过滤器

javascript - 为页面上的所有 iPad 或 iPhone 实例强制使用小写 i

javascript - 从全名字段中解析称呼和名字

javascript - Typeahead 不敏感的重音

javascript - create-react-app 显示错误 "You need to enable JavaScript to run this app."