能帮我把这段代码解释一下吗?谢谢

新手上路,请多包涵
       function doSomething(fn) {
           fn("Hello");
       }
       doSomething(alert);

运行结果是弹出 Hello
这里的fn("Hello")是什么意思,还有doSomething(alert),是将alter函数作为参数传递吧,但我不明白是怎么一个原理。还有就是如果使用alert(doSomething)的话,就会输出

function doSomething(fn) {
           fn("Hello");
       }

麻烦解释得详细一些,谢谢

阅读 1.9k
3 个回答
但我不明白是怎么一个原理

首先,js中函数也是对象,可以作为参数传递,这是非常重要的一点特性,没了这个,js就报废了.
dosomething(alert)是将alert这个函数,作为一个参数传递给dosometing,到了dosth内部,alert被赋值给fn,到了这里,fn===alert,他们是同一个东西,所以fn("hello")alert的行为是一样的.

alert(doSomething)的话...

alert可以认为是这个行为的另一种展示方式:

var obj = "Sth" // 定义任意一个对象或数值
console.log(String(obj)) 
// so alert(doSomething) 展示的结果应该和
console.log(String(doSometing))
//输出的内容相同.
  1. fn("Hello")就是简单的函数调用,fn是一个function。
  2. doSomething(alert),是调用doSomething函数,并将alert函数作为参数传入。在js中,函数也是对象,对待此问题可以看做是调用了一个函数,并将一个对象作为参数传入。这样感觉比较容易接受。
  3. alert(doSomething),首先看alert方法,接受一个参数作为警告内容。如果接受的参数是object类型,会先将object类型的参数转为字符串。所以你的代码调用时,先将doSomething转成了字符串。这里可以将代码写成这样:alert(doSomething.toString())doSomething.toString()输出内容就是最后你的输出内容。具体可见MDN-alert

这是js标准的回调方法. 可以写成这样:

function doSomething(callback) {
    callback('Hello')
};

doSomething(console.log);

调用doSomething时给传了个参数是一个方法, 在doSomething方法内才去执行你的console.log;

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