【问题标题】:Javascript typeof Typeahead returns undefinedJavascript typeof Typeahead 返回未定义
【发布时间】:2015-03-18 01:02:05
【问题描述】:

我在脚本中调用 Typeahead 之前加载了引导 Typeahead 插件,但 typeof Typeahead 即使在绝对加载时也会返回 undefined。

Javascript 文件第 2650 行:

!function($){"use strict";var Typeahead=function(element,options) // ... rest of plugin

Javascript 文件第 2765 行:

alert(typeof Typeahead);

警报未定义

为什么会这样?

【问题讨论】:

  • 因为Typeahead是另一个函数中的私有变量...

标签: javascript twitter-bootstrap-3 typeof


【解决方案1】:

您并没有向我们展示足够多的代码。但是,如果:

alert(typeof Typeahead);

在出现var Typeahead = function() {...} 的功能块之外,那么您就在定义该变量(以及函数)的范围之外,因此该变量将为undefined。变量仅在定义它们的范围内可见。

如果您希望var Typeahead 在该功能块之外可用,则必须在更高的范围内声明它。

举个例子:

function foo() {
   // define local variable only visible within function foo
   var greeting = "Hi";
}

console.log(typeof greeting);   // will show "undefined"

// define higher scope variable visible in foo and outside of foo
var greeting = "Hi";

function foo() {
    console.log(greeting);      // will show "Hi"
}

console.log(greeting);          // will show "Hi"

【讨论】:

  • Typeahead 在全局范围内加载,alert(typeof Typeahead) 在 $(document).ready(function(){}) 内加载;
  • @VinceKronlein - 您的代码显示Typeahead!function($) {...}() 函数中定义。那不是全局范围。那是在函数范围内。如果您需要更详细的帮助,您将显示足够的代码来显示两个相关代码的整个范围,因为这个问题完全是关于范围的,但是您已经缩写了您的代码,因此我们很难确切知道超出范围的内容是什么事实上Typeahead 是在一个函数中定义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多