易截截图软件、单文件、免安装、纯绿色、仅160KB

Zakas解答Baranovskiy的JavaScript小测试

转载自:http://hikejun.com/blog/?p=536
Zakas 1/22在twitter上分享了Baranovskiy的一篇文章“So, you think you know JavaScript?
”(你认为你够了解javascript吗)标题很叫板。结果5小段代码做的稀里哗啦。
今天Zakas专门撰文解答了这几道题(http://www.nczonline.net/blog/2010/01/26/answering-baranovskiys-javascript-quiz/
)。不愧是大师,很深刻。
第1题: 是否真的理解声明变量
if (!(”a” in window)) {
var a = 1;
}
alert(a);
知识点:一是变量声明和初始化是分开的。二是Javascript引擎仅仅是把变量的声明提到当前scope的最前面解释。三是所有全局变量都是window对象的成员。所以这段代码实际是:
var a;
if (!(”a” in window)) {
a = 1;
}
alert(a);
答案就很清楚了-‘undefined’。
第2题:是否真的理解声明function
var a = 1,
b = function a(x) {
x && a(–x);
};
alert(a);
声明function只有两种一种是: function声明
function a (x) {
// do something.
}
另一种是: function表达式
var a = function (x) {
// do something.
}
function声明必须有方法名,而出现在表达式里的方法名都会被忽略。第二种function表达式就是一种赋值表达式,里面的方法名将被忽略。原文回复中提到的这篇文章(http://yura.thinkweb2.com/named-function-expressions/
)写的很详细。
第3题:是否理解function声明的优先级
function a(x) {
return x * 2;
}
var a;
alert(a);
function声明会覆盖掉同名的变量声明,无论变量声明在前还是在后。但当变量赋值后,function就无效了。如:
var a = 1;
function a(x) {
return x * 2;
}
alert(a); //结果是 1
第4题:考是否理解参数对象
function b(x, y, a) {
arguments[2] = 10;
alert(a);
}
b(1, 2, 3);
答案是10。arguments相当于对应x, y, a建立的副本,Javascript引擎实现它们对应的值同步。所以arguments[2]的值变化了,a也随之变化。
第5题:是否真的理解call方法
function a() {
alert(this);
}
a.call(null);
ECMA262第3版标准里有明确说明:
“If thisArg is null or undefined, the called function is passed the
global object as the this value. Otherwise, the called function is
passed ToObject(thisArg) as the this value.”
可见,如果call的


相关文档:

JavaScript 获取对象的高度和宽度详细说明

scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetL ......

JavaScript排序算法

1、插入排序->直接插入法排序
function InsertSort(arr) { //插入排序->直接插入法排序
var st = new Date();
var temp, j;
for(var i=1; i<arr.length; i++) {
if((arr[i]) < (arr[i-1])) {
temp = arr[i];
j = i-1;
do {
arr[j+1] = arr[j];
j--;
}
whil ......

JavaScript正则表达式

JS的正则表达式
//校验是否全由数字组成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
Java代码
function isRegisterUserName(s)   
......

JavaScript实现网页的放大缩小以及拖动功能

项目中遇到一种情况,开发的页面绘制出来的图片或者底图都比较大,超过屏幕大小许多。为了改善使用体验,需要给这类页面添加放大、缩小以及平移的功能。经过一番搜索和尝试,实现了有关功能,备忘如下。
JavaScript:
var zoomRate = 20;//每次放缩比例增量
var maxRate = 300;//最大放大倍数
var minRate = 20;//最小 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号