node.js中传参问题

clipboard.png

http.get(url,function(res){
    var html= ''

    res.on('data',function(data){   //响应接收到数据触发
        html += data
    })

    res.on('end',function(){        //响应结束触发
        var courseData = filterChapters(html)
        printCourseInfo(courseData)
    })
}).on('error',function(){
    console.log('获取课堂资料出错')
})

问题:在函数filterChapter(html)中html作为形参,但我并没有在他所处的匿名函数中传入实参过来,但是在node.js下运行确实有用,并且必须和上面的的变量html要同名才有用,我不理解,有大神来解释一下吗?谢了。

阅读 3.6k
3 个回答

请输入代码> js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域,函数外面的变量函数里面可以找到,函数里面的变量外面找不到。

 res.on('end',function(){        //响应结束触发
    var courseData = filterChapters(html) //这里的html是在外层函数声明的!!!
    printCourseInfo(courseData)
})

函数作用域、闭包啊

ES的函数参数,可以显示声明,也可以干脆不声明。
因为无论声明与否,传参都保存在arguments对象中。
例如:

function add(a,b){
    console.log(a+b);
}
add(1,2)//返回3
function add(){
    console.log(arguments[0]+arguments[1])
}
add(1,2)//也返回3

还有更加重要的一点,由于作用域链的存在,子作用域可以访问父作用域中的变量。
也就是filterChapters(html)所在的匿名函数是子作用域,可以访问定义了父作用域中的html这个变量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题