Cheshirecat

2 干净的,温暖的

第四版第七章 函数

1.函数的return语句.

原文:函数的return语句将停止函数的运行,并把表达式的值返回给函数调用者,如果函数不包含return语句,它就执行函数体中的每条语句,然后返回给函数调用者undefined;

备注:为了便于链式操作,return返回的值应该考虑其重用度.通常我们使用语句if(condition) return;让不具备执行条件的函数终止运行.

2.函数的参数

原文:函数调用时,先要计算括号之间指定的所有表达式,然后把他们的结果作为函数的参数;

备注:None

3.构造函数Function()

原文:传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名,用Function()构造函数创建的未命名函数有时被称为匿名函数;

备注:使用直接量/字面量也可以创建匿名函数;

原文:Function构造函数允许我们动态地创建和编译一个函数,它不会将我们限制在function语句预编译的函数体中,负面效应是每次调用一个函数,Function()构造函数都要对它进行编译

备注:预编译原理,待填充

4.函数直接量/字面量

原文:function语句/Function()构造函数和函数直接量定义三个基本相同的函数

function f(x){retrun x*x};
var f = new Function('x','return x*x');
var f = function(x) {return x*x};

备注:函数直接量与Function构造函数的区别(第四版11.5)

  • (1)构造函数允许在运行时动态的创建和编译代码,但是函数直接量却是程序结构的一个静态部分;
  • (2)每次调用构造函数都会解析函数体并且创造一个新的函数对象,如果对构造函数的调用出现在一个循环中,或者出现在一个经常被调用的函数中,这种方法的效率就非常低;
  • (3)使用构造函数Function创建的函数不使用词法作用域,相反的,它们总是被当做顶级函数来编译.

原文:函数直接量创建的是匿名函数,但是语法规定它可以指定函数名,这在编写调用自身的递归函数时非常有用;

var f = function fact(x){if (x < 2) {return 1} else {return x*fact(x-1)}}

备注:等同于 var f = function(x){if (x < 2) {return 1} else {return x*arguments.callee(x-1)}};

继续阅读这篇文章 »


@during:09/12/15-09/12/30:version:3.0:source:build/*/*.js:module:core

/**
FILE: YUI.JS
LINE: 120-124,682-686
TAG: NONE
COMMENTS:for in 与hasOwnProperty在Y.Object中分别对应hasKey和owns方法,根据MDC的解释,与in操作符不同的是hasOwnProperty并不会去检查in对象的原型链,但是for in 函数只会遍历用户定义的属性(显式),在yui.js中,下面出现的代码片段中作为循环用.
MDC参考:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty
::CODE START::
var o = {};
console.log(‘toString’ in o);
console.log(o.hasOwnProperty(‘toString’));
console.log(‘length’ in o);
for (var i in o) {
console.log(i);
};
::CODE END::
*/

for (j in m) {
    if (m.hasOwnProperty(j)) {
        mods[j] = m[j];
    }
};
for (i in p) {
    if (1) { // intenionally ignoring hasOwnProperty check
        YUI[i] = p[i];
    }
}

继续阅读这篇文章 »