素材牛VIP会员
请问JS函数里的默认参数有什么影响?
 ka***13  分类:Html5  人气:1739  回帖:11  发布于6年前 收藏

大手们,
请问为什么会发生这种事

    var i = "123";
    alert(i) //123
    function x(i){
        i = "321"; 
        }
    x(i);
    alert(i)//321

讨论这个帖子(11)垃圾回帖将一律封号处理……

Lv4 码徒
雨***落 产品经理 6年前#1

这个是作用域的问题,建议多看看《你不知道的JavaScript》

Lv5 码农
h***o 交互设计师 6年前#2

js是按值传递,写在参数里就相当于方法的一个局部变量,不会影响全局变量

Lv3 码奴
wa***88 产品经理 6年前#3

这和js的函数参数传递是值传递有关,第一个函数执行的时候由于传递的只是i的值,所以对全局i没有影响。

第二个由于不是经由参数传递,而是直接引用全局变量,所以修改了全局变量i。

Lv6 码匠
yi***zi Web前端工程师 6年前#4

因为把i传了进去,然后值就变了,其实就是这样: var i=0; i=3的意思

Lv1 新人
Al***ay 职业无 6年前#5

作用域的问题。
不设置参数时,在调用函数时,函数里的i会将全局的i作为函数的值来执行,并将全局作用域的i重新赋值。
设置参数时,i就是函数作用域内部的值,出了函数再用i,当然用的是全局的那个i了。

Lv5 码农
wg***ge 页面重构设计 6年前#6

第一个实际上是把i赋值为123了

Lv6 码匠
驱***森 技术总监 6年前#7

函数的参数名,就是局部变量。你去看看关于 JS 变量作用域的文章把。

Lv5 码农
隔***王 学生 6年前#8

默认参数写法`
function fun(a) {
a = a || 默认值

Lv6 码匠
ju***23 Web前端工程师 6年前#9

你这问题和函数参数没有半毛钱关系,纯粹是不理解函数作用域!

Lv5 码农
许***焱 Web前端工程师 6年前#10

第一个,把全局变量的123传入函数,然后啥事儿没做。全局变量下 i依旧为123.
第二个,执行函数x(),函数x改变了全局变量i的值,改成了321。

这就是有没有形参的区别,第一个你把形参i改成a,b,c之类的没有任何问题。当然对应的你要把函数体内的i也要改变成a,b,c

在js函数执行过程中,函数体内的所有变量首先要在本作用域内找,你会说第一个作用域内没有i啊,但是实际上形参就起到了申明变量的作用。也就是第一个的函数体等于

function x(i) {
    var i=i;
    i='321'
}

如果在本作用域找不到该变量,则向父作用域查找。这就是第二个函数的结果。

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取