变量对象中的函数声明

恩尼克斯
test(); //working

function test(){//do something}

这和(全局)变量对象有关吗?函数在执行过程开始之前是否将变量推送到变量对象?

更新:好的,我真正的问题是“提升”是如何工作的。要理解,您需要看一下javascript的执行上下文,是的,它与变量对象(属于执行上下文)有关。

谢谢

请参阅MDN上范围备忘单

function foo() { } foo自动提升到范围的顶部

这和(全局)变量对象有关吗?函数在执行过程开始之前是否将变量推送到变量对象?

不,这只是吊装。


考虑以下示例:

foo();
// ReferenceError: foo is not defined

(function(){
  foo();
  function foo (){
    console.log("A");
  };
})();
// A

(function(){
  foo();
  function foo (){
    console.log("B");
  };
})();
// B

foo();
// ReferenceError: foo is not defined

吊起只是将变量名称“提升”到作用域的顶部。


我的想法:

从不将函数编写为:

function foo() { ... }

我更喜欢露骨,因为魔术行为很烂。总是写函数为

var foo = function() { ... }

如果我觉得该函数需要一个名称,我会给它一个名称,但仍然使用 var

var foo = function foo() { ... }

@bfavaretto引起了有效的关注:

关于您的意见... var foo = function(){...}还将foo提升到顶部,但具有未定义的值。所以那里也隐含着东西

诚然,它确实葫芦foo具有undefined价值,但事情会如期望的一切工作。

foo();
// TypeError: undefined is not a function
// This is good. We don't want the above function to run like that.
// This is a fatal error; the script won't even continue to run as-is.
// Comment out the above line to get it to run.

var foo = function foo() {
  console.log("foo");
};

var foo2 = function foo() {
  console.log("foo2");
};

// Even with the same function name, these two functions will
// output the correct values.
foo();  // foo
foo2(); // foo2

综上所述,在同一个作用域中拥有两个具有相同名称标识符的功能是很愚蠢的。但是,即使您确实犯了一个错误并编写了类似的错误代码,但是如果您如上所述使用函数表达式,该代码仍然可以正常工作。如果您只是像原始问题中那样使用命名函数,则肯定不会。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在函数中声明变量

来自分类Dev

在构造函数的默认构造对象中未声明变量

来自分类Dev

在函数python中声明变量

来自分类Dev

递归函数中的变量声明

来自分类Dev

对象/类中的函数声明

来自分类Dev

函数声明后使用变量(在函数中)

来自分类Dev

对象中的函数被声明为非函数

来自分类Dev

对象中的函数被声明为非函数

来自分类Dev

Java-我们可以在构造函数中声明对象变量吗?

来自分类Dev

为什么要在对象的函数属性中声明变量之前先引用它?

来自分类Dev

声明一个变量以存储仅用dart中特定命名的构造函数构造的对象

来自分类Dev

PHP在函数中声明全局变量

来自分类Dev

访问声明函数中的私有变量

来自分类Dev

在函数中使用声明中的类型变量

来自分类Dev

在JavaScript中同时声明变量和函数

来自分类Dev

访问在构造函数中声明的变量

来自分类Dev

在变量中声明函数的不同方式

来自分类Dev

mariaddb函数中未声明的变量compid

来自分类Dev

在C ++中的类的函数内部声明变量

来自分类Dev

Javascript:在函数声明中设置变量

来自分类Dev

C ++中的函数和变量声明

来自分类Dev

在函数中声明静态const变量

来自分类Dev

在Oracle SQL函数中声明多个变量

来自分类Dev

在公共函数中声明变量(Excel VBA)

来自分类Dev

在函数调用中声明对象的类型?

来自分类Dev

从 __construct 函数中声明对象的属性

来自分类Dev

是否应在函数内部或外部函数中声明变量?

来自分类Dev

使用在该函数之外的函数中声明的变量

来自分类Dev

在Typescript中向其添加函数之前,如何将一个变量声明为空对象?

Related 相关文章

热门标签

归档