3

为一个看起来非常愚蠢的问题道歉。

我目前正在通过 codecadamy 工作,这让我很失望:

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

greeting(name);

我明白我会得到sausage

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

4

4 回答 4

5

nameinfunction(name)是一个参数。也就是说,它用于将数据传递给函数。但是,参数是局部变量。不过,在函数内部分配一个值name有点奇怪。我会假设你想做这样的事情:

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

  greeting("sausage");

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

于 2013-02-15T02:00:21.980 回答
2

在您的函数定义中:

function(name) {

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

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

var flavor = 'savory';

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

于 2013-02-15T01:56:54.300 回答
2

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

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

但是,这个散列/对象结构是用来存储

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

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

这个结构最有可能使用一些默认值来表示未传入的参数。在现实世界的例子中,这可能看起来更像

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

    console.log( name );
};

greeting('john');  // 'john'
greeting();        // 'default'
于 2013-02-15T01:57:49.560 回答
2

参数是一种通用的编程结构,是在世界编程中做任何理智的事情所必需的(处理大量的全局变量是理智的。

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

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

于 2013-02-15T01:58:12.240 回答