热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS拾荒の函数

函数的形参与实参arguments是一个类数组转真数组两种获取参数长度的方式形参和arguments都指向实际的参数函数、剩余运算符与解构运算函数与剩余函数与解构Function用
  • 函数的形参与实参
    • arguments是一个类数组
      • 转真·数组
    • 两种获取参数长度的方式
    • 形参和arguments都指向实际的参数
  • 函数、剩余运算符与解构运算
    • 函数与剩余
    • 函数与解构
  • Function
    • 用字符串创建一个函数
    • 所有函数们的粑粑
  • 箭头函数
    • 箭头函数木有arguments
    • 箭头函数木有this

函数的形参与实参

arguments是一个类数组

类数组的意味着什么呢?

这意味着他们都有长度,都能够被遍历,它们是长成如下样子的对象而不是数组

{'0':'a','1':'b',length:2,ƒ ifn(a,b,c),Symbol(Symbol.iterator):ƒ values(),__proto__:Object
}

但,毕竟只是相似,具有一些数组的特征,不是真正的数组,So他们不在Array的原型链上,不具有Array原型上的方法,也就是说所有数组独有的方法这些类数组都不能够使用。

转真·数组

  • Array.prototype.slice.call(arguments);
  • Array.from(arguments)

两种获取参数长度的方式

fn.lengtharguments.length都能获得一个函数的参数的长度,

但!fn.length拿到的是形参的长度,而arguments.length拿到的是所传实参的长度,这两个值不总是相等的,因为实际传入的参数的个数可以大于或小于形参的个数。

function ifn(a,b,c){console.log(arguments.length);console.log(ifn.length);
}
ifn();<<<
0
3

形参和arguments都指向实际的参数

下例中&#xff0c;实际传入的第一个参数的值将会被修改&#xff0c;并且在arguments中得到显示

function ifn(a,b,c){console.log(arguments[0]);a &#61; &#39;x&#39;; //实际传入的第一个参数的值将会被修改&#xff0c;并且在arguments中得到显示console.log(arguments)&#xff1b;
}
ifn(1,2,3)<<<
1
{ &#39;0&#39;: &#39;x&#39;, &#39;1&#39;: 2, &#39;2&#39;: 3 }

函数、剩余运算符与解构运算

函数与剩余

注意&#xff0c;若使用剩余运算符必须在形参的末尾处使用

function sum(zero,...args){return currency&#43;eval(args.join(&#39;&#43;&#39;));
}
sum (0,1,2,3,4,5,6)

函数与解构

对象作为实参可在形参处被解构

function ajax({url&#61;new Error(&#39;url不能为空&#39;),method&#61;&#39;get&#39;}){...
}
ajax({url:&#39;/test&#39;,method:&#39;get&#39;});

但并不支持解构数组

let fn1 &#61; function(...args){console.log(args)
};fn1([1,2,3])<<<
[ [ 1, 2, 3 ] ]
//--- --- ---
let fn1 &#61; function(a,b,c){console.log(a)
};fn1([1,2,3])<<<
[1,2,3]

Function

用字符串创建一个函数

此种创建函数的方式常常和模板拼接一起配套使用&#xff0c;让我们能够更自由的创建函数

let strFnBody &#61; &#96;if(arg1)console.log(&#39;参数存在&#39;)&#96;;
let fn &#61; Function(&#39;arg1&#39;,&#39;arg2&#39;,...,strFnBody);
fn(); //执行函数

所有函数们的粑粑

所有函数都是Function函数的实例

let fn1 &#61; function(){};
console.log(fn1.__proto__ &#61;&#61;&#61; Function.prototype)
<<<
true

箭头函数

箭头函数木有arguments

替代方案是利用剩余运算符&#xff0c;嘿&#xff0c;我们得到了还是一个真·数组

(...args)&#61;>{console.log(args);
}<<<
[ 1, 2, 3 ]

其次虽然没有arguments,我们仍然能通过fn.length来拿到形参的个数

let arrow &#61; (a,b,c)&#61;>{ console.log(arrow.length)
}
arrow(1,2,3);<<<
3

箭头函数木有this

let obj &#61; {fn:function(){console.log(this);}
}
let fn &#61; obj.fn;
fn(); //global||window
obj.fn(); //obj
//--- --- ---
let obj &#61; {fn:()&#61;>{console.log(this);}
}
let fn &#61; obj.fn;
fn(); //本模块的最顶层的this window||{}
obj.fn(); //因为箭头函数不再有this会往上找&#xff0c;如果是nodejs会找到{}&#xff0c;如果是浏览器会找到window

当一个函数本身没有this时&#xff08;箭头函数&#xff09;&#xff0c;那么谁调用的函数this就指向谁这句话就不再适用&#xff0c;它会查找上级作用域的this是指向谁。而又因为Node.js中&#xff0c;最顶层的作用域&#xff08;模块作用域&#xff09;的this指向的是{}&#xff08;空对象&#xff09;&#xff0c;故上栗中会指向{}。&#xff08;注意Node.js中文件模块的this并不指向全局对象global&#xff0c;而浏览器是指向window全局对象的&#xff09;

函数作用域链的查找

函数作用域链的查找 是顺着【函数定义时】所处的作用域来查找的

let b &#61; &#39;123&#39;function bbb(){console.log(b)}(function(){let b &#61; &#39;bbb&#39;;bbb(); //123})();



推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
author-avatar
赵小坑_38825
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有