面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现, 使用的时候再一个一个的依次调用就可以了。
面向对象 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。
面向过程与面向对象对比
面向过程
优点
性能比面向对象高,适合跟 硬件联系很紧密的东西,例 如单片机就采用的面向过程 编程。
缺点
不易维护、不易复用、不易扩展
面向对象
优点
易维护、易复用、易扩展,由于面向对象有 封装、继承、多态性的特性,可以设计出低 耦合的系统,使系统 更加灵活、更加易于维 护.
缺点
性能比面向过程低
函数的定义方式
- 方式1 函数声明方式 function 关键字 (命名函数)
function fn(){} - 方式2 函数表达式(匿名函数)
var fn = function(){} - 方式3 new Function()
var f = new Function(‘a’, ‘b’, ‘console.log(a + b)’); f(1, 2); var fn = new Function(‘参数1’,‘参数2’…, ‘函数体’)
函数的调用
/* 1. 普通函数 */
function fn() { console.log('人生的巅峰'); }fn();
/* 2. 对象的方法 */
var o = { sayHi: function() { console.log('人生的巅峰'); } }o.sayHi();
/* 3. 构造函数*/
function Star() {}; new Star();
/* 4. 绑定事件函数*/
btn.onclick = function() {}; // 点击了按钮就可以调用这个函数 /* 5. 定时器函数*/
setInterval(function() {}, 1000);
/* 6. 立即执行函数(自调用函数)*/
(function() { console.log('人生的巅峰'); })();
this的指向
改变函数内部 this 指向
call方法
call()方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向 应用场景: 经常做继承
apply方法 apply() 方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的 this 指 向。应用场景: 经常跟数组有关系
bind() 方法不会调用函数,但是能改变函数内部this 指向,返回的是原函数改变this之后产 生的新函数 如果只是想改变 this 指向,并且不想调用这个函数的时候,可以使用bind 应用场景:不调用函数,但是还想改变this指向
call、apply、bind三者的异同
共同点 : 都可以改变this指向
不同点: call 和 apply 会调用函数, 并且改变函数内部this指向. call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递 bind 不会调用函数, 可以改变函数内部this指向
应用场景 1. call 经常做继承. 2. apply经常跟数组有关系. 比如借助于数学对象实现数组最大值最小值 3. bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.
严格模式
JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。ES5 的严格模式 是采用具有限制性 JavaScript变体的一种方式,即在严格的条件下运行 JS 代码。 严格模式在 IE10 以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。 严格模式对正常的 JavaScript 语义做了一些更改:
1.消除了 Javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为。
2.消除代码运行的一些不安全之处,保证代码运行的安全。
3.提高编译器效率,增加运行速度。
4.禁用了在 ECMAScript 的未来版本中可能会定义的一些语法,为未来新版本的 Javascript 做好铺垫。比如一些保留字如:class,enum,export, extends, import, super 不能做变量名
开启严格模式
严格模式可以应用到整个脚本或个别函数中。因此在使用时,我们可以将严格模式分为 为脚本开启严格模式和为函数开启严格模式两种情况。
情况一 :为脚本开启严格模式
有的 script 脚本是严格模式,有的 script 脚本是正常模式,这样不利于文件合并,所以可以将整个脚本文件放在一个立即执行的匿名函数之中。这样独立创建 一个作用域而不影响其他 script 脚本文件。
情况二: 为函数开启严格模式
要给某个函数开启严格模式,需要把“use strict”; (或 ‘use strict’; ) 声明放在函数体所有语句之前。
严格模式中的变化
严格模式后不能使用未声明的变量
严格模式不允许删除变量
严格模式下全局作用域中函数中的 this 是 undefined
严格模式下,如果构造函数不加new调用, this 指向的是undefined。
如果给他赋值则会报错
严格模式下,定时器 this 还是指向 window
更多特性可以点击这里。