前端笔试面试备考3

简述单向绑定与双向绑定

单向绑定是数据流单一,双向数据绑定主要用于需要实时反映用户输入的场合

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 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值