创建函数并调用时,可以传入一些参数或变量,但是一个被调用的函数有多少个参数?函数中可用的变量如下:示例查看函数调用时会有哪些变量和参数,这里可以直接在浏览器的“隐身窗口”中运行这段代码(隐身窗口可以防止浏览器外挂)ins影响操作)。注意:这仅适用于传统功能。箭头函数的操作变量与传统函数不同,这里不再赘述。varglobalVariable='全局变量';varobj={aFunction:function(para){varlocalVariables='局部变量';console.log(para,localVariables,arguments,this,globalVariable);//包含传入的参数}}obj.aFunction('我是一个描述',2,3);运行时切换到Source页面,使用Chrome的JavaScript调试模式进行验证。接下来,当进入aFunction的函数时,可以切换到console.log(...)这一行,然后停止,结果如下:接下来会看到Scope代表当前函数的作用域,变量在范围内可以调用的也会按顺序列出。这里可以看到的变量和参数包括:para:调用时传入的参数。arguments:传统函数默认会带入的外部参数。这个参数来自于外部传入的参数。即使函数本身不传入,也可以在这里取值。本文后面会有更详细的介绍。this:函数运行时传入的变量。调用函数的方式会影响它的指向。稍后我会另写一篇文章来介绍。localVariables:局部变量,只能调用本函数内的作用域。global:全局变量在以上五个变量中,前两个属于调用时传入的变量,本文也将着重介绍它们的特点。参数的性质参数是主调用函数传入的变量。与其他编程语言相比,JS对传递参数的限制更少,任何值都可以作为参数。下面是一些常见的问题:1.参数名是在声明函数的时候定义的。这是一个非常基本的问题。刚学编程的新手经常会混淆参数名。误以为调用时传入的参数名就是函数中使用的名字。例如,下面这个例子的输出值是多少?A.'a','b','c',undefinedB.'d','c','b','a'functioncallMore(d,c,b,a){console.log(d,c,b,a);}vara='a';varb='b';varc='c';callMore(a,b,c);函数参数的名称在定义函数时就确定了,如下图:参数值是按顺序带进来的,调用时不会受名称的影响。简单结论:参数名不会受调用名的影响。如果遇到声明了但没有传入值的参数,则为undefined。如果是undefined,但是传入的参数比较多,需要用其他方法获取值2。如果ES6的参数默认值已经定义了,但是没有传入,那么函数中获取的值就是undefined。如果出现这种情况,代码中必须加入很多容错机制来避免undefined引起的错误。ES6中新增的“参数默认值”可以为特定的参数预先设置默认值。除了避免undefined带来的错误外,还可以增加使用函数的灵活性。下面的例子可以通过简单的语法添加“参数默认值”,当没有传入外部值时使用默认值。functiongetMoney(money=1000){console.log(`Ihave${money}`);}getMoney();//不需要传入参数3.传入的参数个数无法确认怎么办?这种情况在项目开发中比较少见,但是在框架和函数库的开发中却很常见。前面提到的“如果没有定义,但是传入的参数比较多,需要使用其他方法获取值”,会用到下面介绍的arguments参数(ES6中有更好的方法)。functioncallMore(d,c,b,a){//注意:这里没有使用定义的d,c,b,a参数console.log(arguments);}vara='a';varb='b';varc='c';callMore(a,b,c);所有传统函数都有arguments参数(注意:箭头函数没有),不需要额外定义就可以直接调用,作用域仅限于本函数。arguments的结构本质上是一个数组,里面会包含调用时传入的所有值。当传入的参数个数不确定时,这是一个非常有用的方法。4.ES6剩余参数因为arguments有一些缺点,比如:结构类似于数组,但是数组方法大部分不能直接用来和已经定义的参数内容重叠,不能只用于额外的传入参数,所以ES6增加了剩余参数语法,定义参数时可以直接传入剩余未定参数,语法如下:constcallMore=(a,...args)=>{console.log(args);}vara='a';varb='b';varc='c';callMore(a,b,c);结果与前面的例子类似,但是会显示为一个纯数组,并且只会获取未定义的参数内容(a会被跳过)。此外,箭头函数可以使用剩余的参数。5.函数也可以作为参数。除了传入普通值、数组和对象之外,函数还可以用作参数,使函数运行时更丰富——呃。..复杂的。在下面的例子中,调用functionB时,也可以传入另一个函数作为参数。这种方法称为回调函数(callbackfunction)。functionfunctionB(fn){fn('小明');}functionB(function(name){console.log(name+'你好');});你可以试试看参数是怎么传递的。JavaScript可以将函数作为参数传递。此功能也称为“一流功能”。我将在以后的文章中更深入地介绍它。
