《JavaScript DOM编程艺术》第六章笔记

1.P85“如果没有placeholder图片”指的是ID,还是src还是图片?

如果没有ID,结果和书本一样,点击哪个链接都没反应。

如果没有SRC,进去时没有预图片,但是其他链接正常显示图片。

如果没有图片,和没有SRC差不多,预加载页面图片框架大小不同而已。

所以书本上说的是ID,书本这点没有说清楚。

意味着文档如果没有这种ID的东西(在这里是预加载图片placeholder.gif),就不能好好工作,但是这种东西不一定有,所以要进行平稳退化(没有它也能好好工作),这也是平稳退化的意义所在。

2.过程中发现加入alert('1');可以容易发现哪一步有没有执行。以后可能有document.write方法。

3.onclick = function() {

alert("1");

return !func2();

alert('2');

}

function func2(){

alert("3");

}

alert('4');

开网页弹4,点击弹1,3。与!无关。说明

①return会结束函数。

②载入执行4,再点击执行其他。

③return里面的函数func2()会执行。

但是如果里面是赋值,会不会保存下来呢?

4.我先测试各节点

onclick = function() {

var x=1;

alert(x);

alert("x");

return func2();

}

var y=2; //先执行这里。

alert(y);

alert("y");

alert('y'); //说明双引号和单引号没区别。

function func2(){

var z=3;

alert(z);

alert("z");

}

var k=4;

alert(k);

alert("k"); //运行结果是2yy4k 点击后1x3z,如果是onload,则全部在载入时显示(同上

顺序)。如果是beforeload,则只显示2yy4k,说明function里面的函数不会

给用户看到。提前试用了一下这个函数,以后会再学到吧。

alert(x); //以下的都不运行

alert(y);

alert(z);

alert("k"); //因为这里y没有赋值,所以不运行!!与④是一样效果的!说明程序错误的话,下面的都不运行。

如果把var y=2;变成全局变量y=2;,且alert(y)放在alert(x)之前,则这里正常运行出y。

如果把x变成全局变量呢?答案是没有运行出x(onload,beforeload也一样),因为x存在function里,是后执行的函数。

△如果把一个错误的未定义函数alert(p);放在func2()的前一句。结果是2,y,y,点击后还是1,x,3,z。说明错误函数不会影响function!

④var c=d.firstChild;

onclick = function() {

alert("1");

return !func2();

}

function func2(){

alert("2");

}

发现下面的窗口全部无法弹出。

如果把var放在最后,页面正常弹出窗口。

⑤onclick = function() {

x=1;

return func2();

}

function func2(){

alert(x);

}

结果是1,说明函数间的全局变量是可以行得通的。

相反,如果把alert(x)写在上面,则全部都会出错。如下,全部都不运行。

onclick = function() {

alert(x);

alert("x");

return func2();

}

function func2(){

x=1;

alert("y");

}

再有,函数间的局部变量也是不互通的。下面的程序只显示一个2。

onclick = function() {

var x=2;

alert(x);

return func2();

}

function func2(){

alert(x);

}

5.回到上面func2()里面的值会不会保存的问题,从上面的讨论可以知道,这个要分它原本是局部变量还是全局变量来看。而且要看它之后是用到哪里,function里还是其他地方。要分清楚函数的执行顺序。如果是平行的函数呢?额,还是全部用局部变量好。

6.点击链接时弹窗,该如何写?

var a=document.getElementsByTagName("a")[0];

a.onclick = function() {

alert("2");

}

7.links[i].onclick = function() {

return !showPic(this);}

如果showpic函数不能运行,那么onclick运行,打开新页面。如果showpic函数正常,那么链接不运行,和之前的showpic(this);

return false;语句效果一样。