函数

定义

// 命名函数
function fn(){}
// 匿名函数
var fn = function(){}
// 函数对象 里面参数都必须是字符串格式
var fn = new Function('参数1','参数2'..., '函数体')

调用

// 普通调用
fn()
// 对象的方法
obj.fn()
// 构造方法
new Object()
// 事件绑定
btn.onclick = function(){}
// 定时器函数
setInterval(function(){}, 1000);
// 立即执行函数
(function(){})();

this

2020228104446

改变this指向

call()

function fn(arg1){
    console.log(this) // string cxk
}
// 修改fn函数里面的this指向'cxk'
fn.call('cxk','arg1')

apply()

function fn(a, b) {
    console.log(a, b)
    console.log(this) // obj
}
var obj = { name: 'cxk' }
// 参数使用数组传递
fn.apply(obj, [1, 2])

call 和 apply 传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递

bind()

// 返回一个包装函数
var f = fn.bind(obj, 1, 2)
f()// 调用这个函数,this指向obj

严格模式

JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。ES5 的严格模式是采用具有限制性 JavaScript变体的一种方式,即在严格的条件下运行 JS 代码

  • 消除了 Javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为
  • 消除代码运行的一些不安全之处,保证代码运行的安全
  • 提高编译器效率,增加运行速度
  • 禁用了在 ECMAScript 的未来版本中可能会定义的一些语法

开启严格模式

// 为整个脚本开启严格模式
"use strict";
...
// 在函数中开启严格模式
function fn(){
    "use strict";
}

严格模式中的变化

// 变量未声明不能使用
num = 10 
// 变量不能删除
delete num
// 严格模式下全局作用域中函数中的 this 是 undefined
function fn() { console.log(this); }
// 严格模式下,如果 构造函数不加new调用, this 指向的是undefined 如果给他赋值则 会报错
Object();
//严格模式下,定时器 this 还是指向 window
setTimeout(function() {
  console.log(this); 
}, 2000);
// 严格模式下不能有重名的函数
function a(){}  
function a(){} 
// 不允许在非函数的代码块内声明函数
if (condition){
    function(){}
}

更多变化参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

高阶函数

  • 当参数的类型或者返回值类型是一个函数,则称之为高阶函数

闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数

作用:延伸变量的作用范围

function fn(){
    var num=1;
    return function(){
        console.log(num);
    }
}
fn()()

拷贝

  • 浅拷贝
var obj = {name:'cxk'}
var o ={}
Object.assign(o,obj)
  • 深拷贝
function deepCopy(newObj,oldObj){
    for (var k in oldObj){
        if (oldObj[k] instanceof Array){
            newObj[k]=[]
            deepCopy(newObj[k],oldObj[k])
        }else if(oldObj[k] instanceof Object){
            newObj[k]={}
            deepCopy(newObj[k],oldObj[k])
        }else{
            newObj[k]=oldObj[k]
        }
    }
}

results matching " "

No results matching " "

results matching " "

No results matching " "