Javascript - 为什么功能和代码块有时需要

时间:2014-10-16 23:05:13

标签: javascript

好的,所以解释这个的唯一方法就是举个例子。在javascript中,您可以执行以下操作:

if(condition) {

}

{和}用于标识代码块。但在某些情况下,例如:

window.onload = function() {

}

您需要包含的功能()。为什么它不能只是:

window.onload {

}

为什么需要function()?此外,我认为函数都有一个与它们相关联的名称,并且当调用该名称时函数运行,但为什么在这种情况下是否存在没有关联名称的函数?

3 个答案:

答案 0 :(得分:1)

ifforwhiletrycatch等等都是修改以下声明的statements。例如,如果 if (condition) 表达式求值为condition(或 truthy ),true语句将仅执行以下语句。 block statement是一种特殊类型的语句,用于将多个语句组合在一起,允许if语句应用于代码的更大部分。

但是,window.onload = function() { }是一个expression - 完全不同的构造。它是一个赋值表达式,由三部分组成,赋值运算符(=)表示要赋值的表达式(在本例中为function expression)和对变量或属性的引用将该值分配给(window.onload)。

另请注意,如上所述函数表达式function statement之间存在差异,因为这通常会导致一些混淆。在这两种结构中,身体周围都需要花括号(与if语句不同)。

答案 1 :(得分:0)

{}(也称为"花括号")是punctuators,它们主要用于表示代码块,但还有其他用途。

代码块是有条件执行的语句,用于语法的各种生成,例如用于包含与if statement相关的语句:

if (condition) {
  // statements to execute if condition is true
}

声明中的函数体:

function foo() {
  // statements in function body
} 

和表达式:

var foo = function () {
  // statements in function body
}

也在forwhiledo循环,switchwith语句中,依此类推。 object initialisers(又名object literals)中也使用了圆括号:

var obj = {name: 'foo', age: 42};

现在可能还没有想到很多语法的其他部分。

修改

所以说了所有这些,问题的时间:

  

为什么需要function()?

表示以下代码块是函数体,而不是其他一些产品。

  

另外,我认为函数都有与之关联的名称,

对于函数表达式,名称是可选的。该名称仅在函数内部可用(除了某些版本的IE有一个使名称为全局的错误)以允许递归调用:

// Function expression
var foo = function bar() {
            // In here, call as bar or foo
          };

// Everywhere else, call as foo    
foo();
  

当调用该名称时,函数会运行,但为什么在这种情况下会出现一个没有关联名称的函数?

函数表达式通常分配给变量,该名称用于调用它们。它们也在函数调用中传递,立即执行或分配给对象属性,可以使用普通属性访问器语法调用它们:

var obj = {};
obj.foo = function(){alert('My name is foo')};
obj.foo(); 

函数声明使用函数名称在声明的范围内创建变量,并将从正文创建的函数对象分配给该变量。在执行任何代码之前处理函数声明。

有很多关于函数表达式与函数声明的文章,请参阅Named function expressions demystifiedA closer look at expression closures

答案 2 :(得分:0)

你认为Javascript(可能是一般的编程语言)是错误的。

首先,if是一个语句,一个控制程序流的语言结构。它的设计看起来像if (condition) codewindow.onload是一个变量。 window是一个对象,可以包含"其他变量(在这种情况下为onload),可通过该点符号访问。

在JavaScript中,您几乎可以为变量分配任何内容,因为一切都基本相同。这是令人困惑的,同时也是非常棒的。

分配了一个函数,该函数通过给定的语法new function(params) {code}工作。您也可以完成window.onload = 5window.onload = {a: 5, b: "foo", c: ["bar", "baz"]}。 (但这会导致运行时错误,因为您的浏览器无法运行"那个错误就好像您尝试运行var a = 5; a();