js 函数形参/变量声明/函数声明优先级和arguments
2021/9/24 6:12:49
本文主要是介绍js 函数形参/变量声明/函数声明优先级和arguments,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
function judgeOrder(animal){ // debugger; console.log(animal) // ƒ animal(){ // console.log(animal) // } animal = 'pig' console.log(animal) // pig function animal(){ console.log(animal) } var animal = 'cat' console.log(animal) // cat } judgeOrder('dog')
很显然,可以这里可以看出 var animal = 'cat
这里的animal先声明,然后函数 function animal(){}
的声明覆盖了之前的变量声明。因此第一个打印出了函数。之后就是对animal进行赋值,就打印了pig
,后面也一样打印了cat
。
那么此时,有些同学可能会奇怪传入的参数dog
去哪了。那么此时,我们将 function animal(){}
这个声明注释掉看一下,发现输出如下:
function judgeOrder(animal){ // debugger; console.log(animal) // dog animal = 'pig' console.log(animal) // pig // function animal(){ // console.log(animal) // } var animal = 'cat' console.log(animal) // cat } judgeOrder('dog') // 如果此时未传入实参,那么第一个输出为undefined
此时,显然var animal = 'cat
变量提升,但是没有进行赋值,而我们的函数形参 animal
也有值 dog
,那么就会直接输出dog
了,之后就是对这个animal
进行重新赋值操作。
那么从结论来看,我们可以发现:
优先级: 函数形参 > 变量声明 > 函数声明,
那么相应的值就为最后赋值的变量。
这里还有一个问题就是,将arguments里的的值改变会不会影响到形参的值,将形参的值改变会不会影响到arguments里的值?
写两个简单的例子:
function judgeOrder(animal){ console.log(animal, arguments[0]) // dog dog animal = 'pig' console.log(animal, arguments[0]) // pig pig } judgeOrder('dog')
function judgeOrder(animal){ console.log(animal, arguments[0]) // dog dog arguments[0] = 'pig' console.log(animal, arguments[0]) // pig pig } judgeOrder('dog')
我们发现 arguments里对应的值与形参是相对应的,任一其中一个改变,另一个也会随之改变。这就是arguments和形参的映射机制。
但是这里提一点,就是这种模式只会在非严格模式
下存在,如果在严格模式
下(也就是使用了"use strict";
),arguments和形参的影响是单向的
。
"use strict"; function judgeOrder(animal){ console.log(animal, arguments[0]) // dog dog arguments[0] = 'pig' console.log(animal, arguments[0]) // dog pig } judgeOrder('dog')
以上就是分享的所有内容啦,如果哪里有错,欢迎指出并讨论,谢谢!
这篇关于js 函数形参/变量声明/函数声明优先级和arguments的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略