扫码关注官方订阅号
function m1(){ //...}function m2(){ //...}这种写法都说会污染全局变量,那么具体会产生哪些问题呢?是会有漏洞吗?
尽量做到没有命名冲突,不修改js的函数,逻辑尽量简单还会出现问题吗?
我想,这个是在说模块化的问题吧。例如,你有两个.js。
1.js:
function f() { alert("f() in 1.js"); } setTimeout(function() { f(); }, 1000);
2.js:
function f() { alert("f() in 2.js"); } setTimeout(function() { f(); }, 2000);
如果你在html中先载入1.js,再载入2.js,那么你就会看到两次"f() in 2.js"。因为后载入的2.js把f重新定义了。
要比较实际的例子的话,可以想像1.js需要分割字符串,2.js需要分割数组,然后两个作者都写了个split函数,那肯定有一个模块要坏掉了或者更糟,没有坏掉,但因为些奇怪的配搭而做了些意想不到的事,例如把密码当做AJAX发了出去之类的
解决方法是这样写:
(function() { function f() { alert("f() in 1.js"); } setTimeout(function() { f(); }, 1000); })();
(function() { function f() { alert("f() in 2.js"); } setTimeout(function() { f(); }, 2000); })();
把函数定义在闭包里,f这个名字只在闭包的环境里使用,不会覆盖全局环境。
无法得到想要的结果,就好像,你点外卖,一个汉堡,结果对方给你送来一条鱼
很多问题。时间越长死的越难看。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我想,这个是在说模块化的问题吧。
例如,你有两个.js。
1.js:
2.js:
如果你在html中先载入1.js,再载入2.js,那么你就会看到两次"f() in 2.js"。
因为后载入的2.js把f重新定义了。
要比较实际的例子的话,可以想像1.js需要分割字符串,2.js需要分割数组,然后两个作者都写了个split函数,那肯定有一个模块要坏掉了
或者更糟,没有坏掉,但因为些奇怪的配搭而做了些意想不到的事,例如把密码当做AJAX发了出去之类的
解决方法是这样写:
1.js:
2.js:
把函数定义在闭包里,f这个名字只在闭包的环境里使用,不会覆盖全局环境。
无法得到想要的结果,
就好像,你点外卖,一个汉堡,结果对方给你送来一条鱼
很多问题。时间越长死的越难看。