为什么兼容低版本IE的方法不奏效?
来源:6-2 create系列创建节点的方法
花生香又脆
2019-12-12 23:51:01
老师你好,
我按照视频里写的低版本IE兼容html5的办法,为什么没有用呢?(浏览器是IE11,在开发工具切换成IE8测试的)
这里的函数为什么是这种写法(function(){})();啊?
代码while(i--)这个部分是什么意思呢?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>IE兼容html5标签</title>
<style type="text/css">
article{font-size:40px;color:orange;}
</style>
<script>
(function(){
if (!
/*@cc_on!@*/
0) return;
var e="article, aside, header, footer, nav, section".split(", ");
var i=e.length;
while(i--){
document.createElement(e[i]);
}
})();
</script>
</head>
<body>
<article>
空气
</article>
</body>
</html>
1回答
同学你好,对于你的问题解答如下:
如下,老师测试同学粘贴的代码,在ie8下是可以生效的,建议同学清除缓存在测试一下。
(function(){})();这种写法是js语法中立即执行函数的一个固定写法,因为函数本身会形成一个局部作用域,在函数里面定义的变量在函数外部访问不到的。在实际开发中,一个项目会有很多js文件,代码多了,不同文件之间避免不了变量名重复的情况。如果不把变量包裹在函数里面,那么同名变量后面的会覆盖前面的,这就是变量污染。所以要放在一个立即执行函数里面,这样每一个函数中的变量都不会相互影响了,即不污染全局的环境。
作用域会在后面解答有讲解,目前简单了解一下就行,学到后面就好理解了
i--表示每执行一次循环, 做一次i减一的操作, 当i小于等于0的时候, 会被隐式转换成false,导致循环条件不成立, 退出循环。
这里老师给出一个简单的例子,帮助同学理解:
如果帮助到了你,欢迎采纳,祝学习愉快~
相似问题