《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;语句效果一样。