博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用DMZ对象保护全局变量
阅读量:5233 次
发布时间:2019-06-14

本文共 742 字,大约阅读时间需要 2 分钟。

今天偶然看到this绑定有个比较例外的例子会直接忽略指定的绑定对象。

当给apply/call/bind传入null或undefined时会出现这种情况:

function foo(){    console.log(this.a);}var a=2;// 传入nullfoo.apply(null);      // 2

非严格模式下foo函数中的this被默认绑定到全局对象(只要函数体(不是函数调用位置)处于严格模式下,会绑定到undefined),自然输出就是2。

如果此时全局a被篡改就麻烦了,例如:

function foo(){    this.a="linwei";}var a=2;// 传入nullfoo.apply(null);console.log(a);     // linwei

此时全局a就被篡改了,可能会引发bug。

此时可以用一个DMZ(Demilitarized zone,非军事区)对象来保护全局变量,这个DMZ对象本质上是一个“裸”对象(详见贺老的文章http://hax.iteye.com/blog/1663476):

function foo(){    this.a="linwei";}// 创建DMZ对象var empty=Object.create(null);var a=2;foo.apply(empty);console.log(a);     // 2,不会被篡改成"linwei"

这样就达到保护全局变量a的目的。

如果函数并不关心this值,可以传入一个比null更安全的占位值,DMZ对象将是一个更安全的选择。

转载于:https://www.cnblogs.com/linweinb/p/8270780.html

你可能感兴趣的文章
使用C#交互快速生成代码!
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书_2019年
查看>>
读书汇总贴
查看>>
微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
查看>>
MPT树详解
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
jQuery 1.7 发布了
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>
linux php编译安装
查看>>
name phone email正则表达式
查看>>
721. Accounts Merge
查看>>
OpenCv-Python 图像处理基本操作
查看>>