Js疑问求高手解答

<script>functionbb(){c=[]c.push(arguments)returnc}document.write(bb(1,2,3));</script>... <script>
function bb(){
c=[]

c.push(arguments)
return c
}

document.write(bb(1,2,3));

</script>
打印出来的为啥不是123啊而是[object Arguments]啊而用

<script>
function bb(){
c=[]

c.push.apply( c,arguments)
return c
}

document.write(bb(1,2,3));

</script>
为啥能打印出123求高手指点
还有为啥必须是c.push.apply( c,arguments)用c.push.apply( this,arguments)就不行
展开
 我来答
myrealword
推荐于2016-02-11 · TA获得超过306个赞
知道小有建树答主
回答量:227
采纳率:100%
帮助的人:167万
展开全部

因为 arguments 引用的是一个 Arguments 对象,它类似数组,却不是数组,简单来说,它就是带有下标属性和长度属性的对象,伪码如下:

Argument : { 0 : 实参1 , 1 : 实参2 , ... , N : 实参N, length : N , callee : Function }

可以使用下面的方式调用数组的构造函数,将 Arguments 对象转换成数组:

function getArgument(){
    if(arguments.length == 1){
        return [ arguments[0] ] ;
    }
    return Array.apply( null , arguments );
}

参考:Arguments 对象 http://www.tootei.net/archives/471#1-3-2

追问
谢谢你的回答啊我还想知道为啥必须是c.push.apply( c,arguments)用c.push.apply( this,arguments)就不行啊this代表什么啊括号里的c又代表什么啊
追答
this 代表了当前上下文对象。

代码运行在全局域中,this 就指向全局对象。

如果在构造函数中,thsi 指向刚刚创建的对象。

关于 this 的知识,有些繁琐,请参考 http://www.tootei.net/archives/471#4 前后的章节。

函数是特殊的对象,它内部实现了 [[Call]] 方法,简单来说:函数就是可以调用和执行的对象。

作为对象,函数也有自己的属性和方法,apply方法 就是其中之一。

apply 方法的用途,是将第一个参数作为函数的上下文也就是 this 指代的对象,第二个参数是一个数组或类数组,作为传递给函数体的实参列表。

之所有两种方式的结果不同,肯定是其内部实现不同。直接调用 push 不对类数组对象进行转换,而 apply 方法则会进行这种转换。
古朴丶国宝472
2014-11-13 · 超过69用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:126万
展开全部
看明白了,初始的时候这个div的4个ul是display:block状态 不是display:none;状态,所以开始会全部显示,你改成下面这样就可以了,把后面3个加隐藏<div id="main0" class="main"><ul class="block">.....</ul><ul class="block" style="display:none">.....</ul><ul class="block" style="display:none">.....</ul><ul class="block" style="display:none">.....</ul></div>
追问
什么乱七八糟的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式