文章目录
简述单向绑定与双向绑定
单向绑定是数据流单一,双向数据绑定主要用于需要实时反映用户输入的场合
JavaScript中的模块化
名称 | 实现 | 其他 |
---|---|---|
AMD | 浏览器端,require.js实现 | 依赖前置 |
CMD | 浏览器端,see.js实现 | 依赖就近 |
CommonJS | 服务器端,NodeJs实现 |
作用域与闭包的理解
当参数为普通数据类型时
for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
console.log(i); // 0,1,2,3,4
},0);
})(i);
}
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);// 4,4,4,4,4
},0);
}
当参数为对象时
for (var i = {
j:0}; i < 5; i.j++) {
(function(i) {
setTimeout(function(){
console.log(i.j);//4,4,4,4,4
}, 0);
})(i);
}
引用类型变量,加上自执行函数,仍然不行的原因:
for(var i = {
j: 0}; i.j < 5; i.j++){
(function(i) {
setTimeout(function(){
console.log(i.j); // 0,1,2,3,4
},0);
})(JSON.parse(JSON.stringify(i)));
}
代码分析:
- 知识点1:这道题涉及到,for循环中,var申明变量没有块级作用域。会导致for循环结束后,以前的值,无法保留下来。
- 知识点2:JS里面的语句执行顺序。总体是从上往下执行,调用function时会将它放入栈中,遇到 setTimeOut()会放入队列中。function按照先进后出的顺序执行。而setTimeOut会在所有可以执行的JS语句都执行完毕后,再按照先进先出的顺序执行计时器。
对于没有块级作用域,通过闭包的原理解决。
网上有人说,例子二输出一样是因为没有块级作用域,但我认为不太对,因为我们已经用自执行函数解决了没有块级作用域的问题。
(1)JSON.stringify:将JS数据结构转化为JSON字符串
(2)JSON.parse :将JSON字符串解析为JS数据结构
检测一下是否弄懂了
var data