javascript – 函数参数

前端之家收集整理的这篇文章主要介绍了javascript – 函数参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
功能Foo(f)
{
var f = f;
}

这里里面的函数变量f是本地的Foo(它有一个函数范围)
但参数列表中的变量f以与之不同的方式命名
在冲突中可能是因为它绑定在Foo.arguments对象内?

在其他语言中,我们无法声明与局部变量具有相同名称的参数变量.

这个名字的歧义如何解决?或者,如何在方法中稍后引用两个不同的“f”变量中的每一个?

解决方法

JavaScript做了几件不明显直观的东西 – 你感兴趣的东西被称为“提升” – JS将var声明移动到一个函数的顶端,它们的唯一目的是将这个变量名称保留为函数范围内的局部变量.有时,这将导致 lots of weirdness.如果变量名已被保留为局部变量(例如,它是一个参数),则var声明将完全删除.

JS的另一个不切实际的部分是它如何处理参数变量和参数对象(这有点特别,如Hippo所示).这不一定是您感兴趣的,但是,对于您的示例来说重要的是参数也声明变量名称函数的本地.

所有这些的结果是,当你有一个var f和一个参数名称f时,`var f’将被丢弃,你的例子相当于:

function Foo(f) {
   f = f;
}

您可以在河马的例子中看到这一点,因为:

function foo(f) {
    console.log(f); // --> 11
    console.log(arguments); // --> array [11]
    var f = 10;
    console.log(f); // --> 10
    console.log(arguments); // --> [10] (!!!)
}

相当于:

function foo(f) {
    var f;
    console.log(f); // --> 11
    console.log(arguments); // --> array [11]
    f = 10;
    console.log(f); // --> 10
    console.log(arguments); // --> [10] (!!!)
}

相当于:

function foo(f) {
    console.log(f); // --> 11
    console.log(arguments); // --> array [11]
    f = 10;
    console.log(f); // --> 10
    console.log(arguments); // --> [10] (!!!)
}

有关更多详细信息,请阅读ECMA-262的JS规范中的10.1.3 – 变量实例化(p.37的底部).

猜你在找的JavaScript相关文章