参数和局部变量有什么不同?

时间:2013-02-15 01:54:04

标签: javascript

抱歉看起来像非常愚蠢的问题。

我目前正在使用codecadamy,这让我失望:

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

greeting(name);

我知道我会得到sausage

为什么我不写var name = "sausage";?有什么区别?

4 个答案:

答案 0 :(得分:5)

name中的function(name)是参数。也就是说,它用于将数据传递到函数中。但是,参数是局部变量。在函数内部为name赋值有点奇怪。我想你会想做这样的事情:

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

  greeting("sausage");

在此版本的代码中,您通过参数name将值“sausage”传递给函数。这很有用,因为您可以多次调用该函数,并且每次函数可以根据您传递的内容打印不同的值。

答案 1 :(得分:2)

在你的功能定义中:

function(name) {

名称已被宣布。它是该函数的参数。如果要更改名称,可以,但不需要使用var将其声明为新变量。

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

var flavor = 'savory';

在这种情况下,flavor是局部变量,name是参数。参数是一种使用函数声明声明的局部变量,但局部变量不一定是参数,因为它可以在函数的其他地方声明。

答案 2 :(得分:2)

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

在这里没有给你巨大的背景,你必须明白在底层实现中,形成了一个特殊的对象(不是在C / C ++级别的javascript对象),它被称为激活对象 (ES3)或词汇环境记录(ES5)。

但是,此哈希/对象结构用于存储

  • var
  • 声明的变量
  • 形式参数
  • 功能声明

如您所见,var个变量和参数都存储在此结构中。

此构造很可能用于在参数中未传递的某些默认值。在一个现实世界的例子中,这可能看起来更像

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

    console.log( name );
};

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

答案 3 :(得分:2)

参数是一个通用的编程结构,是在世界编程中做任何理智的必要条件(处理大量的全局变量理智。

var name会在函数范围内声明一个新变量,该变量将覆盖参数name的值,因此您将无法再使用该参数。

CodeAcadamy示例有点奇怪,因为您很少想要覆盖参数的值 - 尤其是在您使用它之前。