参数和局部变量有何不同?

3

非常抱歉,这可能是一个非常愚蠢的问题。

我目前正在学习Codecademy,以下内容让我感到困惑:

 var greeting = function(name) {
    name = "sausage";
    console.log(name); 
};

greeting(name);

我知道我会得到香肠

为什么不直接写var name = "sausage";?有什么区别吗?

4个回答

5
< p > 在 function(name) 中,name 是一个参数。也就是说,它被用于将数据传递到函数中。但是,参数是局部变量。在函数内给name赋值有点奇怪。我想你想要做的是这样:

 var greeting = function(name) {         
     console.log(name); 
  };

  greeting("sausage");

在这个版本的代码中,你通过参数name传递了值"sausage"到函数中。这很有用,因为你可以多次调用函数,每次函数可能会根据你传递的不同值打印出不同的结果。

啊,非常清楚。所以它有点像一个占位符?谢谢。 - user1469270

2

在你的函数定义中:

function(name) {

名称已经被声明了。它是函数的一个参数。如果你想改变名称,你可以这样做,但你不需要使用var来声明它作为一个新变量。

另一方面,如果你想添加,比如说,口味,你应该使用var,因为它还没有被定义过。

var flavor = 'savory';

在这种情况下,flavor是一个局部变量,而name是一个参数。参数是一种在函数声明时声明的局部变量类型,但局部变量不一定是参数,因为它可能在函数的其他地方声明。


谢谢。那么我可以这样写吗:function(name, flavor);? - user1469270
1
拥有参数意味着数据需要来自其他地方(或者至少你期望如此)。如果你定义了一个函数 function(name, flavor),那么当你调用它时,你需要这样做: greeting('sausage', 'savory'); 以传递值供其使用。 - Mark Ormston

2

从技术上讲,它们没有真正的区别。

不过,需要了解的是,在底层实现中,会形成一个特殊的对象(不是 JavaScript 对象,而是 C/C++ 级别的),称为激活对象(ES3)或词法环境记录(ES5)。

然而,这个哈希/对象结构被用来存储:

  • var声明的变量
  • 形式参数
  • 函数声明

可以看到,var变量和参数都存储在这个结构中。

最有可能使用这个结构的原因是为了具有一些未传入参数的默认值。在真实世界的例子中,可能会更像下面这样:

var greeting = function( name ) {
    name = name || 'default';

    console.log( name );
};

greeting('john');  // 'john'
greeting();        // 'default'

2

参数是一种通用的编程构造,对编程世界中的任何理性行为都是必要的(处理大量全局变量是不理智的)。

var name会在函数作用域中声明一个新变量,它将覆盖参数name的值,因此再也无法使用该参数。

CodeAcadamy的示例有点奇怪,因为极少情况下您会想要覆盖参数的值——特别是在使用它之前。


1
实际上,对于未传入参数的默认值,这并不是很罕见。param = param || 'default'; - jAndy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接