JavaScript函数的类型是在声明函数之前定义的
Typeof of a javascript function is defined before the function is declared?
有人可以解释或链接到一个资源,告诉我为什么:
<script type=" type="text/javascript">
if(typeof window.myfunc == "function"){
alert("Why does myfunc already exist ?");
}
function myfunc(){
}
</script>
是否会在 myfunc 函数尚未定义时弹出警报?
我想我在Chrome,Safari和IE(不是FF)中发现了与此行为相关的问题。当包含函数的 js 文件多次包含在网页中时,它使我无法扩展函数的原型。在称其为错误并报告之前,我想了解更多信息。
谢谢!
命名函数声明(包括函数体)被提升到JavaScript 中的顶级范围。我建议阅读这篇关于JavaScript 范围和提升。
如果您执行了类似操作,则将函数分配给了命名变量,只有变量声明会被提升,但它不会实际发生赋值之前的值:
if (typeof myFunc == 'function') {
// will not be reached
}
var myFunc = function() { ... }
上述内容实际上被视为:
var myFunc; // myFunc is undefined
if (typeof myFunc == 'function') {
// will not be reached
}
myFunc = function() { ... }
一个词:吊装
引用 JavaScript Garden 的一句话:
"上述功能在程序开始执行之前被吊起;因此,它在定义范围内的任何地方都可用,即使在源代码中的实际定义之前调用也是如此。
更多信息在这里: http://bonsaiden.github.com/JavaScript-Garden/#function.general
相关文章:
- 用嵌套函数和默认函数定义函数
- 使用Extjs进行函数定义
- JS中奇怪的函数定义语法
- 重写javascript函数定义
- 使用角度图时,我可以用函数定义数据点颜色吗
- modal.js中的匿名函数定义
- 为从AJAX调用中utlizes DATA参数的函数定义回调
- Emacs:在 etag 中查找函数定义
- Javascript:对象函数定义
- 为什么要在函数定义之外引用静态变量(函数属性)
- Ember 对象函数定义中的计算属性.js
- javascript/jQuery中函数定义的区别
- CoffeeScript 承诺与函数定义链接
- 如何在使用 eval() 评估 JavaScript 时将回调函数定义作为参数传递
- Javascript - 为什么下面的函数定义错误
- 使用函数声明时的自定义函数(也称为惰性函数定义)
- JavaScript 函数定义不正确
- jQuery off on 时是用匿名函数定义的
- 停止 IntelliJ 11 在启用 JSLint 时向每个嵌套函数定义添加“use strict”
- 为什么不是't我为这个函数定义的javascript函数