tcl科技|JavaScript 函数

tcl科技|JavaScript 函数

函数


人对上帝说:「我……似乎看不到希望了」
上帝于是指着宇宙苍穹 。
「你看 , 这都是我给你的希望」
JavaScript 中最好的特性就是它对函数的实现 , 它几乎无所不能 。 但是 , 相比你也能预料到 , 函数在 JavaScript 里也并非万能药 。
函数包含一组语句 , 它们是 JavaScript 的基础模块单元 , 用于代码复用、信息隐藏和组合调用 。 函数用于指定对象的行为 。 一般来说 , 所谓编程就是将一组需求分解成一组函数与数据结构的技能 。
函数对象在 JavaScript 中函数就是对象 。 对象是 「名/值」对集合并拥有一个连到原型对象的隐藏连接 。 对象字面量产生的对象连接到 Object.prototype  。 函数对象连接到 Function.prototype , Function.prototype 的原型对象是 Object.prototype 。 每个函数在创建时附有两个附加的隐藏属性:函数的上下文和实现函数行为的代码 。
每个函数对象在创建时也随带有一个 prototype 属性 。 它的值是一个拥有 constructor 属性且值为该函数的对象 。 这和隐藏连接到 Funtion.prototype 完全不同 。
因为函数是对象 , 所以它们可以像任何其他的值一样被使用 。 函数可以存放变量、对象和数组中 , 函数可以被当作参数传递给其他的函数 , 函数也可以返回函数 , 而且 , 因为函数是对象 , 所有函数可以拥有方法 。
函数的与众不同之处在于它们可以被调用 。
函数函数对象可以通过函数字面量来创建 。
varadd=function(ab){returna+b
函数字面量包括四个部分 , 第一个部分是保留字 function
第二个部分是函数名 , 它可以被省略 。 函数可以用它的名字来递归地调用自己 。 此名字也能被调试器和开发函数用来识别函数。 如果没有给函数命名 , 比如上面这个例子 , 它会被认为是匿名函数 。
函数的第三部分是包围在圆括号中的一组函数 , 其中每个参数用逗号分隔 。 这些名称将被定义为函数中的变量 。 它们不像普通变量那样被初始化为 undefined, 而是在函数被调用时初始化为实际提供的参数值 。
第四部分是包围在花括号中的一组语句 。 这些语句是函数的主体 , 它们在函数被调用时执行 。
函数字面量可以出现再任何允许表达式出现的地方 。 函数也可以被定义在其他函数中 。 一个内部函数自然可以访问自己的参数和变量 , 同时它也能方便的访问嵌套在其中的那个函数的参数和变量 。 通过函数字面量创建的函数对象包含一个连到外部上下文的连接 , 这被称为闭包 。 它就 JavaScript 强大表现力的根基 。

闭包就是内部函数访问外部函数参数和变量的一种方式 , 打通了内部函数连接到外部函数上下文的连接 。
调用调用一个函数将暂停当前函数的执行 , 传递控制权和参数给新函数 。
除了声明时定义的形式参数 , 每个函数接收两个附加的参数:this 和 arguments 。 参数 this 在面向对象编程中非常重要 , 它的值取决于调用的模式 。 在 JavaScript 中一共有四种调用模式:方法调用模式、函数调用模式、构造器调用模式和 apply 调用模式 。 这些模式在如何初始化关键参数 this 上存在差异 。
?方法调用模式?函数调用模式?构造器调用模式?apply 调用模式
调用运算符是跟在任何产生一个函数值的表达式之后的一对圆括号 。 圆括号内可包含零个或多个用逗号隔开的表达式 。 每个表达式产生一个参数值 。 每个参数值被赋予函数声明定义的形式参数名 。 当实际参数的个数与形式参数的个数不匹配时不会导致运行时错误 。