解决方案 »

  1.   

    说全局不准确,而是把局部的变量Jim与调用方法showName移植在FunUtil局部内触发。
      

  2.   

    这个工具的用处就是可以在对象作用域之外来调用对象的方法,在动态拼接按钮的时候用到
    如果事先在html写好标签,这个就用不到了
      

  3.   

        <script type="text/javascript">
            <!--
            //各函数私有变量不能互相访问,那我把他们都请到我家来不就解决问题。
            var FunUtil = (function(){
                return function(param,k){
                    if(k){
                        showName(arr[--k]);//直接调用函数
                    }else{
                        !this.arr&&(arr=[]);
                        arr.push(param);//存储变量,也是复制一下变量
                        return "FunUtil('',"+(arr.length)+")";
                    }
                };
            })();
            function showName(obj){
                alert(obj.name);
            }
            window.onload = function(){
                var Jim = {name:"Jim"};
                var Lucy = {name:"Lucy"};
                var buttons = '<input type="button" value="没有工具" onclick="'+FunUtil(Jim)+'">'
                        +'<input type="button" value="没有工具" onclick="'+FunUtil(Lucy)+'">';
                document.body.innerHTML += buttons;
            };
            //-->
        </script>
    没有那么神秘。
      

  4.   

    再举个例子
    前台JS通过AJAX请求获取到商品列表,把商品名称展现到html上,点击商品名称显示商品详情
    // 查看商品详情
    function showDetail(goods){
    alert('厂商:'+goods.factory+',价格:'+goods.price);
    }window.onload = function(){
    // 从后台获取商品列表
    var goodsItems = [
    {name:'手机',factory:'NOKIA',price:1000}
    ,{name:'电脑',factory:'Apple',price:2000}
    ] // 生成html,点击查看商品详情
    for(var index in goodsItems){
    var goods = goodsItems[index];
    //document.body.innerHTML += '<a href="javascript:showDetail('+goods+')">'+goods.name+'</a><br>'; // error :(
    document.body.innerHTML += '<a href="javascript:'+FunUtil.createFun(window,'showDetail',goods)+'">'+goods.name+'</a><br>'
    }}
    当然可以传一个商品ID,通过商品ID查询商品信息再显示,这样的话就多了一步数据库操作了,显然是不好的
      

  5.   

    其实说白了就是允许我们在某个函数的外部作用域调用其自身作用域范围内的方法
    有时为了防止重名,会把函数声明在另一个函数内部,如:
    window.onload = function(){
    // 内部类
    function Inner(){
    var name = "Jim";
    this.showName = function(){
    alert(name);
    }
    } var inner = new Inner();
            // 通过<A>标签在外部作用域调用inner.showName()
    document.body.innerHTML += '<a href="javascript:'+FunUtil.createFun(inner,'showName')+'">Test</a><br>';
    document.body.innerHTML += '<a href="javascript:inner.showName()">Test2</a><br>'; // error
    }
      

  6.   

    没看明白你们想说什么  好像饶了一个非常大的圈子后又返回来一样  本来可以直接从a走到b的 非要从a走到c在走到d在走到f然后回到b