参数和局部变量之间有什么不同
What is the different between a parameter and a local variable?
为一个看起来非常愚蠢的问题道歉。
我目前正在处理代码库,这让我很失望:
var greeting = function(name) {
name = "sausage";
console.log(name);
};
greeting(name);
我知道我会得到sausage
为什么我不直接写var name = "sausage";
呢?有什么区别?
function(name)
中的name
是一个参数。也就是说,它用于将数据传递到函数中。但是,参数是局部变量。不过,在函数内部为name
赋值有点奇怪。我想你想做这样的事情:
var greeting = function(name) {
console.log(name);
};
greeting("sausage");
在这个版本的代码中,您通过参数name
将值"香肠"传递到函数中。这很有用,因为您可以多次调用该函数,每次函数都可能根据您传递的内容打印不同的值。
在函数定义中:
function(name) {
名称已被声明。它是函数的参数。如果您想更改名称,可以,但不需要使用var将其声明为新变量。
另一方面,如果你想添加,比如说味道,你应该使用var,因为它还没有定义。
var flavor = 'savory';
在这种情况下,flavor是一个局部变量,name是一个参数。参数是用函数声明声明的局部变量类型,但局部变量不一定是参数,因为它可能在函数的其他地方声明。
参数是一种通用的编程构造,是进行世界编程中任何正常操作所必需的(处理大量全局变量是而不是正常操作。
var name
将在函数作用域中声明一个新变量,该变量将覆盖参数name
的值,因此您将无法再使用该参数。
CodeAcadamy的例子有点奇怪,因为您很少想要覆盖参数的值,尤其是在使用它之前
从技术上讲,没有真正的区别。
在不提供大量背景的情况下,您必须理解,在底层实现中,会形成一个特殊的对象(而不是C/C++级别的javascript对象),称为激活对象(ES3)或词汇环境记录。
但是,这个散列/对象结构用于存储
var
声明的变量- 形式参数
- 函数声明
正如您所看到的,var
变量和参数都存储在这个结构中。
此构造很可能用于在某种程度上具有默认值,用于未传入的参数。在现实世界中的例子中,这可能看起来更像
var greeting = function( name ) {
name = name || 'default';
console.log( name );
};
greeting('john'); // 'john'
greeting(); // 'default'
- 全局变量和全局对象的属性之间有什么区别吗
- 什么是&&在没有if的行中的变量之间
- DOM元素和angular元素之间的主要区别是什么
- 什么's本地node.js服务器和python简单http服务器之间的区别
- JSDoc:模块和名称空间之间的关系是什么
- 什么'$.get和$.ajax之间的区别是什么
- Math.min()和Math.max()之间有什么区别?在Javascript中
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- webpack开发模式和生产构建模式之间有什么区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 什么's extjs中的mon()和on()之间的区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 什么's使用脚本标记调用文件和ajax之间的区别
- $(e.target).find和template.find('input').value之间有什么区别
- 什么'“dest”和“dist”之间的区别是什么
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 在测试间谍的上下文中,存根和mock之间有什么区别?(茉莉花)
- webpack中的源映射之间有什么区别