js和c语言有什么区别
1.c言可以通过调用系统API来实现多线程,可以通过多线程来提高阻塞操作(主要是IO)时的CPU利用率,而JavaScript主要是单线程,JavaScript的可能阻塞的操作都由JavaScript运行时提供的异步API来完成
2.JS是脚本语言有解释器执行 c需要编译成机器语言
3. C语言需要程序员手动管理内存(主要指堆内存的申请和释放),而JavaScript的内存是由解释器来管理的;
4.JavaScript是动态类型语言,变量的数据类型在运行时仍可变化;
es5和es6有什么区别
1、在变量方面es6提供了let和const这两种新的声明方法,let和const的出现大大的避免了变量污染的问题,局部作用域变量声明
2. this指向 es6新增了箭头函数,箭头函数不会改变this的只想,这样我们在调用方法或者执行函数的时候就可以不用担心this指向
3. es6还提供了解构赋值的功能
es5的继承的实现过程是什么?用es5写一个继承,让sub子类继承base基类
1、原型链继承
原型链继承的原理是直接让子类的原型对象指向父类实例,当子类实例找不到对应的属性和方法时,就会往它的原型对象,也就是父类实例上找,从而实现对父类的属性和方法的继承。
2、借用构造函数继承
构造函数继承,即在子类的构造函数中执行父类的构造函数,并为其绑定子类的this,让父类的构造函数把成员属性和方法都挂到子类的this上去,这样既能避免实例之间共享一个原型实例,又能向父类构造方法传参。
3、组合继承
组合上述两种
4、寄生式组合继承
解决构造函数被执行两次的问题, 我们将指向父类实例改为指向父类原型, 减去一次构造函数的执行。
es5有哪些作用域?es6有哪些作用域?
全局作用域 局部作用域
全局作用域 局部作用域 块级作用域{}
实现一个bind函数,function(func,obj)实现把里面的函数绑定这个对象
实现object.entries()函数
vue里面的数据双向绑定的原理
(一)Vue实现数据双向绑定主要是:采用数据劫持结合发布者–订阅者模式的方式,通过object.defineProperty()来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。当把一个普通JavaScript对象传给Vue实例来作为它的data选项时,Vue将遍历他的属性Property,用object.defineProperty将它们(Property)转为getter/setter。用户看不到getter/setter,但是在内部它们让Vue追踪依赖,在属性被访问和修改时通知改变。
(二)Vue的数据双向绑定将MVVM作为数据绑定的入口,整合observer,compile和watch三者,通过observer监听自己的model的数据变化,通过compile来解析编译模板指令(vue中是用来解析{{}}),最终利用watcher搭起observer和compile之间的通信桥梁,达到数据变化->视图更新。视图交互变化(input)->数据model变更双向绑定效果。