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

2019-01-02 19:47发布

问题:

在做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}这样吗?(不可以 但是不太懂)
  • 匿名函数又是啥 我感觉我已经全部乱套了?

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

回答1:

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



标签: