• 技术文章 >后端开发 >Python教程

    JavaScript 如何获取闭包变量?

    2016-06-06 16:22:17原创626
    var o = (function() {
    	var person = {   //  let person  竟然也会被外部拿到 let 被打脸了啊
    		name: 'Vincent',
    		age: 24,
    		__proto__ : null // 是的你没有 看错 真的是 指向 null
    	};
    	return {
    		run: function(k) {
    			return person[k];
    		}
    	}
    }());
    
    // 那么问题来了, 挖掘机技术 呸呸呸 说错了 口误! 
    

    回复内容:

    来抖个机灵。抖前先把正经的说了:

    JavaScript的闭包是一种颇为紧密的封装。可以说,闭包是JavaScript在ES6的private Symbol之前唯一靠谱的“private”访问控制的实现方式。

    在JavaScript层面没有任何办法可以通过闭包的函数对象取出闭包捕获的变量——除非该函数自己把它返回出来(或者用其它方式传递出来)。这样闭包就可以精确的控制自己想要暴露出来的信息量。

    所以例如说:
    var o = (function () {
      var a = 1
      var b = 42
      return {
        foo: function () {
          console.log(a + b)
          return b
        }
      }
    })()
    
    我也来抖个机灵:IE9 下 __proto__ 是无效的呢。所以在 Object.prototype 上添加 getter 的方法在 IE9 下依然有效。 如果你引擎实现得好的话,那么——是做不到的。你可以试着用霍尔逻辑证明一下……
    不过如果引擎不支持 __proto__(似乎 IE 很长时间都没支持),可以通过注入 Object.prototype 一个 getter 实现。 原来是面试题,js都被这么玩坏了。
    明明是通过闭包实现的私有,那就让他私有好了,为毛要访问他呢,看着不爽就重构一下。 我们可以通过return一个函数来获取,具体看JS的闭包机制。 你是想问js是否有类似反射这种反设计的东西吗?
    意图限制而又开后门。。。 return 的对象中把person也返回不就行了 谢邀
    闭包的核心点是作用链的引用,
    所以return person就可以了。
    不知道为什么会有这种需求 javascript里的闭包是设计成对外隐藏内部变量,这才是闭包安全性的意义所在,你现在要获取它,,,,,什么鬼
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:person function return null var
    上一篇:Python 中列表推导(list comprehension)相对于循环有什么优势?性能会更高吗? 下一篇:为什么python代码有时候在命令行下和Python Shell中执行的结果不一样呢 ?
    Web大前端开发直播班

    相关文章推荐

    • Python数据类型详解之字符串、数字• Python归纳总结之json标准库• 详细讲解Python之Seaborn(数据可视化)• Python详细解析之多线程爬虫与常见搜索算法• 完全掌握Python数学相关模块

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网