var getName = function () { } 和 function getName () { }
时间: 2024-05-26 17:17:17 浏览: 13
这两个语法形式都可以用来定义一个函数,但是在 JavaScript 中,第二种形式更加常用。
第一种形式 var getName = function() {} 是函数表达式的形式,定义了一个匿名函数并将其赋值给变量 getName。这种形式的函数可以被作为参数传递给其他函数,也可以在函数内部被定义和使用。
第二种形式 function getName() {} 是函数声明的形式,它会使函数在执行之前被预解析,并且会被提升到作用域的顶部。这种形式的函数可以在全局作用域和函数内部定义,并且可以在任何地方被调用。
因为函数声明会被提升到作用域的顶部,所以在代码中使用函数声明的形式可以使代码更加清晰易懂。而函数表达式则更适合在需要按需加载函数或将函数作为参数传递的场景中使用。
相关问题
function Foo() { getName = function() { console.log(1); }; return this; } Foo.getName = function() { console.log(2); }; Foo.prototype.getName = function() { console.log(3); }; var getName = function() { console.log(4); }; function getName() { console.log(5); } getName(); Foo().getName(); getName();
这段代码输出的结果是:
5
1
1
首先,在代码执行之前,JavaScript 引擎会对函数和变量进行提升,因此先声明了变量 `getName` 和函数 `getName`。
接下来,调用 `getName()` 函数,会输出 5,因为这里的 `getName()` 指的是变量 `getName`,它被提升到了顶部,并且在赋值之后,它的值是函数。
然后,执行 `Foo().getName()`,这里需要注意的是 `Foo()` 返回的是 `this`,而 `this` 是全局对象,在浏览器中通常是 `window`。因此,这句代码相当于调用 `window.getName()`。在 `Foo()` 函数内部,有一个局部变量 `getName` 被赋值为函数,因此输出 1。
最后,再次调用 `getName()`,输出的仍然是 1,因为在全局作用域中,变量 `getName` 已经被重新赋值为函数。
function Foo() { getName = function() { console.log(1); }; return this; } Foovar getName = function() { console.log(4); };Foo().getName(); getName(); 为什么打印的是1
这道题目考察了JavaScript中函数作用域以及this的指向。
首先,我们来看一下 `Foo()` 函数。函数中定义了一个 `getName` 函数,并将其赋值给了一个全局变量 `getName`。在 `Foo()` 函数中,我们还返回了 `this`,也就是全局对象 `window`。
接下来,我们调用了 `Foo().getName()`。这里需要注意的是,调用 `Foo()` 函数后返回的是全局对象 `window`,因此相当于执行了 `window.getName()`。而在执行 `window.getName()` 之前,我们在 `Foo()` 函数中重新定义了 `getName` 函数,所以最终输出的是1。
最后,我们再次调用 `getName()` 函数,此时输出的是4,因为在全局作用域中,`getName` 函数的值已经被重新定义为4了。