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];
    }
}

继续阅读这篇文章 »


@during:09/09/07-09/10/01:version:2.8.0:source:*.debug.js

/**
FILE: YAHOO.DEBUG.JS
MODULE: YAHOO.env.ua
COMMENTS:前增符号和后增符号的区别
e.g. CODE:
var i = 1;
console.log(i++); //print 1
console.log(i); //print 2
*/

var numberfy = function(s) {
    var c = 0;
    return parseFloat(s.replace(/\./g, function() {
        return (c++ == 1) ? '' : '.';
    }));
}

/**
FILE: YAHOO.DEBUG.JS
MODULE: YAHOO.LANG
COMMENTS:NaN的特殊性
e.g. CODE:
console.log(typeof NaN); //print ‘number’
console.log(isFinite(NaN)); //print false
*/

isNumber: function(o) {
    return typeof o === 'number' && isFinite(o);{
}{

继续阅读这篇文章 »


考虑Normal Flow,Position以及Block Formatting Context的关系起因于Kejun在Twitter上所提及的一个在Internet Explorer和Opera下对元素使用绝对定位进行布局时的一个问题,链接在这里:http://hikejun.com/bugs/opera_ie6_overflow_bug.html

检视了一下CSS 2.1文档,Normal Flow,指正常文档流,在W3官方的CSS  2.1文档中并没有直观的表述,而是阐述了它与元素上下文环境的关系:

Boxes in the normal flow belong to a formatting context, which may be block or inline, but not both simultaneously. Block boxes participate in a block formatting context. Inline boxes participate in an inline formatting context.

正常文档流中的盒模型属于格式化过的块元素上下文环境或者是行内元素上下文环境,块元素处于块元素上下文环境中,而行内元素则处于行内元素上下文环境中.

对于块元素关系环境,W3在CSS 2.1文档中的解释比较模糊:

Floats, absolutely positioned elements, inline-blocks, table-cells, table-captions, and elements with ‘overflow’ other than ‘visible’ (except when that value has been propagated to the viewport) establish new block formatting contexts.

浮动元素,使用绝对定位的元素(position属性值为absolute或fixed),另外display属性值为inline-block,table,table-cell,table-caption以及overflow属性值为auto,scroll,hidden的元素可以产生一个新的块元素上下文环境.

而在Mozilla Dveloper Center中有更详细的解释:

A block formatting context is a part of a visual CSS rendering of a Web page. It is the region in which the layout of block boxes occurs and in which floats interact with each other.

A block formatting context contains everything inside of the element creating it that is not also inside a descendant element that creates a new block formatting context.

Block formatting contexts are important for the positioning and clearing of floats. The rules for positioning and clearing of floats apply only to things within the same block formatting context. Floats do not affect the layout of things in other block formatting contexts, and clear only clears past floats in the same block formatting context.

所谓的块元素上下文环境是网页样式渲染机制的一部分,它限定了块元素布局区域以及浮动元素相互影响的范围.

继续阅读这篇文章 »


对于淘宝UED玉伯语义研究系列一,em strong的区别,有一些想法,也添加了评论,作为评论写的有一些长,稍微整理修改一下写到这里.

原文:http://lifesinger.org/blog/?p=909

个人认为,em,strong的原始意义为在某个句子,段落或者整篇文章中强调某个单词或某个句子的重要性,按照西方的习惯和大部分字体设计,font-style为normal,italic,bold.分别正常字体,斜体和粗体,是递进性的语气.

那么建立在上面的理解基础之上,讨论em,strong的使用上的区别并没有太多的意义,因为限定了使用的环境为句子,段落和整篇文章.

其实大部分情况下,使用em,strong也只是为了减少class,id选择器的使用,如果只是单纯的为了页面高亮(highlight)之用,em不再是斜体,而strong也不再是粗体,既然这样,外观(appearance)就是样式表所控制的,em,strong和span的使用也再无任何语义上的区别.

另外,斜体在中文排版中是不适用的,中文的斜体很大程度上降低了可辨识性.

dl,dt,dd,作为定义列表和其他标签的区别:

1. 用作解释和诠释.也就是说dt和dd是语义上有等级层次之分,但是dt中的文本内容从结构上并不能够直接包含dd中的文本内容.借用w3schools的例子,对咖啡的解释就是如此,原文解释咖啡为热的黑色饮料.

黑色的表示颜色,热,饮料表示温度和状态,但热的黑色的饮料不一定就是咖啡.

2. 专业术语或者比较笼统,需要拆分解释的.例如Adobe的Adobe cs4产品页面中用到的定义列表用于解释新功能.例如对Fireworks4的新功能概括为 “使用 Adobe Fireworks CS4 制作 Web 原型和编辑图像”.那么有必要进行拆分解释.链接如下:

http://www.adobe.com/cn/products/creativesuite/mastercollection/features/

3. dl是列表,也就是集合性质的,考虑到样本容量,在多个定义存在的情况下才有必要使用,如果只是单个样本存在,是否可以考虑使用如下结构:

div-title-description,也就是div-h2,h3,h4-p,ul,div…

4. 如果dt和dd如果直接存在意义上的包含,可以考虑使用div-title-description结构,也就是div-h2,h3,h4-p,ul,div…

5. e.g. 淘宝的商品信息描述,如果单纯考虑到页面结构,页面可以用到定义列表,拆分为主的,而非完全解释性的.对一件商品进行描述.如一件衣服:

<dl/>

<dt/>销售信息可以分为:<dd/>-<ul/>-<li/>价格,运费,剩余时间…

<dt/>产品信息可以分为:<dd/>-<ul/>-<li/>尺码,大小,颜色…

毕竟只是个假设,可以看到现在商品信息页的结构并没有这么简单.


对于针对不同的终端设备显示不同的样式,CSS提供了一个简单的方法就是设置Media Types,CSS 2.1规范根据不同设备(device)划分为以下十种值:语音设备的”aural”,布莱叶盲文识读设备的”braille”,布莱叶盲文打印设备的”embossed”,小屏幕或者手持设备的”handheld”,常规打印设备的”print”,设计展示(如幻灯片设备)的”projection”,电脑屏幕的”screen”,电传打字机的”tty”,电视设备的”tv”以及针对所有设备的”all”.通常情况下我们使用到的是screen,print,all.但从CSS3草案中的Media Queries中我们可以看出一些趋势.如width,device-width的设定对于屏幕尺寸受到限制的手持设备的意义.

针对样式表置入方式不同,也有不同的使用方法.

使用链接方式的,可以设置media属性的值:

<link rel="stylesheet" media="screen" href="screen.css" type="text/css">

使用导入方法的,可以使用下面的方法:

@import url(screen.css) screen;

使用置入页面style标签中的以及使用链接或导入方式而将media属性设置为all的,可以在规则代码中这样设置:

@media screen {};

继续阅读这篇文章 »


微格式基础的知识从微格式官方microformats.org详细的了解到,从微格式官方一段解释文字我们或许可以明了微格式创建目的.

Designed for humans first and machines second, microformats are a set of simple, open data formats built upon existing and widely adopted standards. Instead of throwing away what works today, microformats intend to solve simpler problems first by adapting to current behaviors and usage patterns.

微格式将人类作为首要的考虑因素,然后才是考虑的数据的机读性,它是建立在已经被广泛使用的标准之上的一套简单开放的数据格式.我们不需要抛开我们的工作习惯,因为微格式提供符合当前我们行为和习惯模式的简便方法去解决问题.

继续阅读这篇文章 »

Previous Entries