本文章将会用10分钟时间无死角的解析JS的传参方式,希望能对您有所帮助。
先说结论,JS只有值传递,没有引用传递。这句话可能会颠覆一些小伙伴的认知,但请先别急,马上你将会赞同我。
值传递是什么?
在函数传参的过程中,实参将数值传递给形参。
EXP:
function fun(x) {
console.log(x)
}
let a = 123
fun(a)
1
2
3
4
5
6
1
2
3
4
5
6
运行结果
在fun(a)这个函数调用语句中,实参为a、形参为x,从输出结果来看,可以证明实参a将数值123传给了形参x。
疑问:是否可以通过形参x数值的修改,来改变实参a的值?
EXP:
function fun(x) {
x = 666
}
let a = 123
fun(a)
console.log(a)
1
2
3
4
5
6
7
1
2
3
4
5
6
7
运行结果:
可以看到实参a的数值并没有因为x的改变而发生变化。是因为值传递的特点决定,咱们接着往下看。
2、值传递的特点:
单向传递,只能将实参的数值传递给形参,不能将形参的值传递给实参。
EXP:
我们希望编写一个交换两个变量数值的函数swap。
在《JavaScript DOM编程艺术》中有这么一段:
各成员的概念与区别一目了然。
但随着nodejs的兴起,V8的炙热,简单地将javascript理解成可提供交互的程序设计语言,难免显得单纯了。
所以,Javascript无所不能(夸张),CSS一技所长!
方法一:使用原生js操作dom的方法,来改变css的样式,比如
document.getElementById(id).style.property =newstyle
这里的new style 里面就可以使用js传入的变量。
此方法固然可以,但是对应改变一些复杂的css,比如动画什么的,操作起来就不怎么方便了。此时,如下的方法二就显得尤为重要了!
方法二:
利用css变量来处理,思路是将js变量赋值给css变量,然后在css样式中使用css变量。如下图所示,我们传入year变量,然后生成了--top、--bottom等变量,然后这些变量就可以在css中使用!