首页 新闻 会员 周边 捐助

函数内部 有个window[].function(){xxxx}到底是啥意思

0
悬赏园豆:50 [已解决问题] 解决于 2018-12-29 09:31

在做jsonp关于搜索sug问题

  • 有一处地方不是很懂 (其实是一点都不懂..)
  • 先上代码
        window.onload = function () {
            var btn = document.querySelector("#btn")
            btn.onclick = function(){
                var cityName = document.querySelector("#city").value

                //动态创建script 并且添加src属性
                var script = document.createElement('script')
                script.src = "http://www.xufeng.com:3306/ajax/server/result.php?city=" + cityName +"&callback=foo"
                document.querySelector('head').appendChild(script)

                window['foo'] = function(data){
                    console.log(data)
                }

            }
        }
    </script>
  • php代码
$cbName = $_GET['callback'];
$cityName = $_GET['city'];
if($cityName == '宿迁'){
    echo $cbName . "('宿迁天气晴')";
}else{
    echo $cbName . "('没有查询到此地信息')";
}
  • 问题地方
window['foo'] = function(data){
        console.log(data)
       }
  • 我知道这里等同于创建一个script标签 声明个函数 可以写成这样
<script>
    function foo(data){
           console.log(data)
        }
</script>

问题来了?

  • 那个window函数是全局的吗,还是作用在点击事件里的?
  • 是不是只能通过回调函数才能返回那个信息?
  • 可以写成 var foo = function(){xxx}这样吗?(不可以 但是不太懂)
  • 匿名函数又是啥 我感觉我已经全部乱套了?

求好心人帮帮忙,梳理一下?

无所不能的风的主页 无所不能的风 | 初学一级 | 园豆:156
提问于:2018-12-27 21:56
< >
分享
最佳答案
0

是全局的,相当于在window对象下声明了一个函数,而要函数执行,你肯定要去调用它,点击只是调用它的一种方式。
返回信息是要返回data吗,直接return就好了。然后调用时赋值var d=foo(1);此时d就是return的值。
可以啊,这不就是构造函数的声明方式吗。
匿名函数就是没有名字的函数,这个具体你可以百度一下,百度说的详细

收获园豆:50
你风致 | 老鸟四级 |园豆:2215 | 2018-12-28 09:55

你说的很对,但是我看的有点吃力,很多地方模棱两可

无所不能的风 | 园豆:156 (初学一级) | 2018-12-28 10:07

那里是不是等价于 function foo(data){ console.log(data)} 还是全局函数
而点击就代表window调用了一次foo函数 并且在控制台输出了data数据
你所说的 return 用变量接受 ,再输出就可以在页面显示了

最近在看回调,感觉啥都混在一起了,谢谢你!

无所不能的风 | 园豆:156 (初学一级) | 2018-12-28 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册