javascript常见问题小结

1.执行javascript 操做dom 文档对象的时候,js 要放在body的下方。
不然会找不到对象!!!!即要先加载dom才能操做dom!
2.操做dom 以后你的dom树的结构有可能会发生变化,继续按照原来的操做会报错!
确认dom 的结构,不要犯错特别是使用jquery的时候$(this)  $(this).sblings()继续点下去,要知道本身操做的究竟是哪一个dom 节点。
3.函数加()和不加() 的区别,加()是直接调用这个函数,不加是函数自己,下面看例子。javascript

function func(){

return 1;

}

alert(func);

alert(func());

4.遍历集合绑定函数html

var list=document.getElemntsByTagName("a");

for(var i=0;i<list.length;i++){

list[i].onclick=function(){

list[i].style.color="fff";//注意执行的时候(点击元素),选择的是list[i] 的改变颜色,可是这时候循环早就执行完.

//i的值是list.length,因此你会找不到对象,要用this,还有一些状况要用到闭包。

}

}

5.一个html 的问题
<div width='100' height='100'></div>和java

<div style="width='100' ;height='100';"></div>区别jquery

html 的角度说不清楚闭包

在js 中,第一个至关于 setAttribute('width',100);dom

第二个 至关于 style.width=100;函数

6.i++的问题this

var i=1;
var b=i++ + ++i;//4
 i=1;
b=(i+1) +  i++;//3       ++i==(i+1),是成立的
重点不是玩什么i++ ,而是一个i++不是一个运算完成才+1 ,
而是碰到第一个运算符的时候就+ 了1 ,
i++ + 这时候i的值就是2了 ,!!

7.闭包
闭包原理是做用域的规则(下层级能够访问上一层级的做用域),再加上一个引用计数(若是被引用就不会被gc回收),使闭包里面的内容不被回收,达到了保存变量的做用。code

function func(){

var count=1;

return function(){

count+=1;

alert(count);

}

}

//1

var add=func()

add();//2

add();//3

//2

func()();//2

func()();//2

为何这两个不一样?
func(),只被执行了一次。而后执行两次add(),那count的值就是只声明了一次。
var add=func(),函数func 只在这里执行了一次。
下面执行的都是add(),那第二次的count的值是从哪儿来的,没错它仍是第一次执行add时,留下来的那个变量。
因为再次执行add()的时候,再次引用了第一次func()产生的变量count ,因此count没有被释放,第一次s(),count 的值为2,第二次执行add(),count的值再加1,天然就是3了。
第二种,是执行了两次func(),第二次没被引用,执行一次就直接释放掉。因此都是2htm

相关文章
相关标签/搜索