在JavaScript中,几乎每次编写一段代码时,通常都会写入一个函数。我们的大部分代码执行都是函数调用的结果。所以本文主要给大家介绍了一些JavaScript常用的函数、下面话不多说了,来一起看看详细的介绍吧
一、绑定电话,申请函数的实现改变函数的执行上下文中这个指的向,但不执行该函数(位于函数构造函数的原型对象上的方法)
Function.prototype。myBind=函数(目标){ 如果(typeof !==昂?{ 把错误(myBind不是一个函数) } var=这 var args1=参数[…].slice (1) var func=function () { var args2=(. .参数).slice (1) 返回的列表。应用(目标| |窗口,args1.concat (args2))} 回归函数 } Function.prototype。myCall=function(上下文=窗口){ 如果(typeof !==昂?{ 把错误(myBind不是一个函数) } 上下文。fn=这 var args=参数[…].slice (1) 结果var=context.fn (. . args) 删除context.fn 返回结果 } Function.prototype。myapp=function(上下文=窗口){ 如果(typeof !==昂?{ 把错误(myapp不是一个函数) } 上下文。fn=这 var的结果 如果(参数[1]){ 结果=context.fn(…参数[1]) 其他}{ 结果=context.fn () } 删除context.fn 返回结果 }
二,引用数据类型的深拷贝方法的实现
函数cloneDeep(目标){ 函数checkType(目标){ 返回Object.prototype.toString.call(目标)。片(1) } var结果,checkedType=checkType(目标) 如果(checkedType===笆椤?{ 结果=[] }else if (checkedType==='对象'){ 结果={} 其他}{ 返回目标 }//递归遍历对象或数组中的属性值或元素为原始值为止 (var关键的目标){ 如果(checkType(目标(关键))===笆椤眧 | checkType(目标(关键))==='对象'){ 结果(例子)=cloneDeep(目标(关键)) 其他}{ 结果[主要]=目标(关键) } } 返回结果 }
思路:
-
<李>输入需要深拷贝的目标目标,输出深拷贝后的结果李>
<李>通过Object.prototype.toString准确判断传入的目标靶的数据类型,当目标的数据类型为对象或者数组时,会对目标进行递归遍历直至当遍历的数组或者对象中的数据全部为基本数据类型为止李>
三,数组平函数的实现
Array.prototype.flat
四,实现n的阶乘
分析:首先找规律,举例如3的阶乘等于3 * 2 * 1,也就是等于n * n - 1 * 2的阶乘,也就是等于3 * 2 * 1的阶乘,计算到1的阶乘之后,整个计算过程才结束。分析到很容易想到通过递归来实现这个数的阶乘,因为第一,这个计算过程有规律可循,第二它有最终停止计算的出口,也就是当计算到1的时候就停止运算,以下通过递归来实现
函数的阶乘(num) { 如果(num & lt;0){ 把新的错误(“负数没有阶乘”) } 如果(num===1 | | num===0) { 返回1 } 返回num * factorial (num-1) } 阶乘(3)//6
五,实现斐波拉契数列
分析:按照上述阶乘的分析过程分析,这里不赘述
斐波那契函数(n) {//此方法应使用尾递归法进行优化,这里不作优化,简单实现 如果(n & lt;=1){返回1}; 返回斐波纳契(n - 1) +斐波纳契(n - 2);}
六,实现一个计算字符串字节长度的函数
分析:首先我们要知道英文的字节长度是1,而中文的字节长度是2,但是如何判断当前字符位是汉字还是英文呢,通过charCodeAt来判断当前字符位的unicode编码是否大于255,如何大于255则是汉字,那就给字符串的字节长度加2,如果小于255年则是英文,就给字符串的字节长度加1,以下按照这个思路实现
函数countBytesLength (str) { var长度=0//首先遍历传入的字符串 (var=0;我& lt;str.length;我+ +){ 如果(str[我].charCodeAt(我)比;255){ 长度+=2 其他}{ 长度+ + } } 返回长度 } var str=' DBCDouble陈的 countBytesLength (str)//11
七,实现isNaN函数
分析:要判断传入的值是否是“不是一个号码”(isNaN全拼),首先进行一个数字的隐式类型转换,通过包数量装类来实现(x),再判断Numberz (x)的返回值是否是南,如果是的话再与南进行比对,但是由于南虽然类是数字型的,但是是不能进行比较的,所以我们先将数量(x)返回的结果变成字符串形式,再去判断,实现如下