javascript常见问题小结。

当作看不见 2016-11-03 02:56:27
加精
1.执行javascript 操作dom 文档对象的时候,js 要放在body的下方。。否则会找不到对象!!!!
要先加载dom才能操作dom

2.操作dom 之后你的dom树的结构有可能会发生变化,继续按照原来的操作会报错!!!!确认dom 的结构,不要犯错特别是使用jquery的时候$(this) $(this).sblings()继续点下去,要知道自己操作的到底是哪个dom 节点

3.函数加()和不加() 的区别,加()是直接调用这个函数,不加是函数本身,下面看例子。

function func(){
return 1;
}
alert(func);
alert(func());


4.遍历集合绑定函数

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>和
<div style="width='100' ;height='100';"></div>区别
html 的角度说不清楚
在js 中,第一个相当于 setAttribute('width',100);
第二个 相当于 style.width=100;

6.唠叨一下一个i++ 的问题 ,(实际上谁TM 这样玩)
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回收),使闭包里面的内容不被回收,达到了保存变量的作用。

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(),第二次没被引用,执行一次就直接释放掉。所以都是2


厚颜自己推荐一下,
...全文
8292 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
此账号已关闭 2018-11-01
  • 打赏
  • 举报
回复
求积分。好人
彩舒 2018-08-30
  • 打赏
  • 举报
回复
感谢总结哦,嘻嘻
温柔不再为 2017-08-25
  • 打赏
  • 举报
回复
感谢分享,受教了。
夜的千章 2017-08-25
  • 打赏
  • 举报
回复
mark 一下
Mr_li_Write 2017-06-29
  • 打赏
  • 举报
回复
a1370936 2017-03-23
  • 打赏
  • 举报
回复
这个分不是这么好拿的呀 大兄弟
qq_38015862 2017-03-22
  • 打赏
  • 举报
回复
we1vi 2017-03-17
  • 打赏
  • 举报
回复
正在学习JS 感谢总结
liping199486 2017-03-17
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
积分是啥
nangongsheng 2017-02-27
  • 打赏
  • 举报
回复
lupcheng 2017-02-21
  • 打赏
  • 举报
回复
对于第六个,我还是有点不明白想问下楼主。在i++执行时,先取了i的当前值1,再进行了自加运算,所以在执行++i时是2+i的初始值。而对于这个i的初始值,为什么不是在自加运算中取2,而是回到最初i的赋值呢
starWind徐 2017-01-18
  • 打赏
  • 举报
回复
mark一下
fearlessfe 2017-01-17
  • 打赏
  • 举报
回复
感觉闭包还是有点不明白啊
回首吓一跳 2017-01-13
  • 打赏
  • 举报
回复
chiangleoi 2017-01-12
  • 打赏
  • 举报
回复
qq_37298674 2017-01-10
  • 打赏
  • 举报
回复
第四个遍历集合真心不懂唉,我觉得就是改了嘛
左眼回忆 2017-01-04
  • 打赏
  • 举报
回复
多谢~~~~~~~
Seventeen_July 2016-12-20
  • 打赏
  • 举报
回复
受教了,支持楼主~
墙角的灰 2016-11-29
  • 打赏
  • 举报
回复
受教啦 涨知识
加载更多回复(35)

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧