js函数相关

Posted 简单的小伙子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js函数相关相关的知识,希望对你有一定的参考价值。

js函数杂记:

js中的回调函数

js中的回调函数的理解:回调函数就是传递一个参数话函数,就是将这个函数作为一个参数传到另外一个主函数里面,当那个主函数执行完之后,再执行传递过去的函数,走这个过程的参数化的函数,就叫回调函数,换个说法也就是被作为参数传递到另一个函数(主函数)的那个函数就叫做回调函数。

回调函数:函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。”,这句话的意思是函数b以一个参数的形式传入函数a并执行,顺序是先执行a ,然后执行参数b,b就是所谓的回调函数

function  a(callback){
    alert('a');
    callback.call(this);//或者是 callback(),  callback.apply(this),看个人喜好
}
function  b(){  // 为回调函数。
    alert('b');
}
//调用
a(b);

js中的回调函数:官方解释,当程序跑起来的时候,一般情况下,应用程序会时常通过API调用库里的所先预备好的函数,但是有些库函数,却要求应用先传给它的一个函数,好在适合的时候调用,以完成目标任务。这个被传入的,后又被调用的函数成为回调函数。

通常将一个函数B传入另外一个函数A,并且在需要的时候调用A.,说白了就是回溯函数,先定义好将要使用的函数体,饭后在使用在调用这个函数我们通常把callback作为一个参数传入定义的那个函数。下面我们看一段js代码,看回调函数是怎么实现的:

function Buy(name,goods1,callback) {
    alert(name+' buy '+goods1);
    if(callback&&typeof(callback)==="function")
        callback();
}
Buy('xiaoming','apple',function(){
    alert("shopping finish");
});

一个简单的代码,一开始不知道要买啥,等到买东西的时候,立即把之前定义好的函数调用出来,最好加上判断,因为一切的前提是callback必须是一个函数,输出结果为:

xiaoming buy apple
shopping finish

闭包与回调:

什么是闭包?

js中hasOwnProperty()

js属性对象的hasOwnProperty()方法,返回的是一个布尔值,判断对象是否包含特定的自身(非继承)属性。基础用法

var o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');  // true
changeO();
o.hasOwnProperty('prop');  // false
js数组函数,arry中every()方法,

定义和用法:

every()方法适用于支持数组所有元素是否符合制定条件(通过函数提供)

every()方法使用指定函数检测数组中的所有元素

  • 如果数组中检测到有一个元素不满足所判断情况,则整个表达式返回false,且剩余的元素不会再进行检测。
  • 如果所有的函数都满足条件,则返回true。

其中,every()不会对空数组进行检测,every()不会改变原始数组。

语法:arry.every(function(currentValue,index,arr),thisValue)

参数说明:

  • function(currentValue,index,arr),必须,函数,数组中的每个元素都会执行这个函数,函数参数:
    • currentValue,必须,当前元素值。
    • index,可选,当前元素的索引值
    • arr 可选,当前元素属于的数组对象
  • thisValue,可选,对象做为该回执函数时调用,传递给函数,用作“this”的值,如果省略了thisValue,“this”的值为“undefined”

还需要注意的是:返回值为布尔值,如果所有的元素都通过了检测返回true,否则返回false。

js中Array中的some()方法,

定义和用法:

some()方法用于检测数组中元素是否满足指定条件(函数提供,也就是自己所写的函数),some方法以次执行数组的每个元素。

  • 如果一个元素满足条件,则表达式返回true,剩余的元素不会再执行检测
  • 如果没有满足条件的函数,测返回false。

注意:some()不会对空数组进行检测,some()不会改变原始数组

语法:array.some(function(currentValue,index,arr),thisValue)

  • 参数:function(currentValue,index,arr)必须,函数,数组中的每个元素都会执行这个函数,函数参数:
    • currentValue,必须,当前元素值
    • index,可选,当前元素的索引值
    • arr,可选,当前元素属于的数组对象
  • thisValue,可选,对象作为该执行回调时使用,传递给函数,用作“this”的值,如果省略了“thisValue”,“this”的值为“undefined”

注意点:返回值为布尔值,如果数组中有元素满足条件返回true,否则返回false。

Object.assign()的使用

属于ES6的东西

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)中。

可枚举属性:可枚举属性和不可枚举属性是由对象的属性的enumerable值决定,可枚举属性是指那些内部enumerable 标志设置为 true 的属性对于通过直接的赋值和属性初始化的属性,该标识值默认为即为 true。但是对于通过 Object.defineProperty 等定义的属性,该标识值默认为 false。可枚举的属性是可以通过for…in循环遍历(除非该属性名是一个Symbol),或者是通过Object.keys()方法可以返回一个可枚举的属性的数组,(Object.keys()不能返回不可枚举属性)。客串一下知识,可枚举属性和不可枚举属性。js对象的可枚举属性和不可枚举属性

其中js中基本包装类型的原型对象的属性是不可枚举的,如Object, Array, Number等。

const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

Object.assign方法的第一个参数是目标对象,后面的参数是源对象,其中,如果目标对象与源对象有同名的属性的话,或者多个源对象有同名属性,则后面的属性会覆盖前面的属性。附上代码:

const target = { a: 1, b: 1 };

const source1 = { b: 2, c: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

注意点:

1、Object.assign方法实行的是浅拷贝,而不是深拷贝,也就是说,如果源对象某个属性值是对象,那么目标对象浅拷贝得到的是这个对象的引用。附上代码:

const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2

上面的代码中,源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用,这个对象的任何变化,都会反映到目标对象上面。

2、同名属性的替换,对于这中嵌套的对象,一旦遇到同名属性,object.assign的处理方法是替换,而不是添加。

const target = { a: { b: 'c', d: 'e' } }
const source = { a: { b: 'hello' } }
Object.assign(target, source)
// { a: { b: 'hello' } }

上面的代码中,target对象的a属性被source对象的a属性给替换掉了,而不会得到{a:{b:‘hello’,d:‘e’}}的结果,这通常不是开发者所需要的,需要特别注意。

3、数组的处理,Object.assgin可以用来处理数组,但是会把数组作为对象。

Object.assign([1, 2, 3], [4, 5])
// [4, 5, 3]

上面代码中,Object.assign把数组视为属性名为 0、1、2 的对象,因此源数组的 0 号属性4覆盖了目标数组的 0 号属性1

4、取值函数的处理

Object.assign只能进行对值进行复制,如果要复制的值是一个取值函数,那么将求值后再复制

以上是关于js函数相关的主要内容,如果未能解决你的问题,请参考以下文章

几个关于js数组方法reduce的经典片段

js简洁代码片段

js代码片段: utils/lcoalStorage/cookie

js数组高阶方法reduce经典用法代码分享

js数组高阶方法reduce经典用法代码分享

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段