基本的javascript函数语法

时间:2016-07-22 09:26:37

标签: javascript function

从MDN开始,只是想知道为什么函数周围的(),为什么在它之后的extra(),以及为什么函数里面的var b没有替换第一个var b的值,给定它不使用关键字let,这将保持该函数的本地化,谢谢

var a = 1;
var b = 2;

(function() {
  var b = 3;
  a += b;
})();

a; // 4
b; // 2

3 个答案:

答案 0 :(得分:0)

在函数内部编写var b时,var关键字使其成为局部变量。因此,函数内部的var b是局部变量,函数外部顶部的var b在全局范围内。您可以在MDN中阅读有关范围界定的更多信息。此外,函数之后的()被称为立即函数调用,这意味着函数在定义后很快就会被调用。此外,由于函数内部在声明之前没有var,它将采用全局a为1并添加3,局部变量b的值。

答案 1 :(得分:0)

简单地立即调用该函数。这就是最后一个括号的用途。函数声明周围的额外括号是因为

function() {
  var b = 3;
  a += b;
}();

会产生语法错误,因为function关键字不会被解释为此处的表达式。

  

以及为什么函数内部的var b不替换第一个var b的值,因为它没有使用关键字let,这将使b保持在该函数的本地,

您可能听说过let的特殊之处在于它是块范围的。确实如此。但是var一直是作用于函数的,因为第二个var b在它自己的函数中,它的作用域是该函数,并且不会影响顶部作用域中的b

答案 2 :(得分:0)

模板

(function(){})();

是匿名函数的模板 为了解释它,让我们创建一个警告'hello'的函数x()

function x() {
    alert('hello');
}

要致电x,我们会:

x();

现在,很明显,如果我们用它的值替换对象的名称,statememt将保持不变(例如var k = 5; alert(k); alert(5) - 两个警报是相同的,因为变量的名称被替换为它的值)。

在我们的例子中,x的值是: function(){     警报( '你好'); }

因此,如果我们在x语句中将x();替换为{ - 1}} - >

(function () {
    alert('hello');
})();

这就是语法的来源。结果将立即调用指定的函数。当然,这种语法也适用于带有返回类型的参数和函数的函数。