返回信息流这是网上找的一道前端题目:
当我们使用CSS3新属性,比如:box-shadow或者transition时,我们怎么检测浏览器是否支持这些属性?
请设计一个JavaScript函数,该函数接受一个CSS属性名作为参数,并返回一个boolean值,表明浏览器是否支持这个属性。
解答:
var supports = (function() {
var div = document.createElement('div'),
vendors = 'Khtml Ms O Moz Webkit'.split(' '),
len = vendors.length;
return function(prop) {
if ( prop in div.style ) return true;
prop = prop.replace(/^[a-z]/, function(val) {
return val.toUpperCase();
});
while(len--) {
if ( vendors[len] + prop in div.style ) {
// browser supports box-shadow. Do what you need.
// Or use a bang (!) to test if the browser doesn't.
return true;
}
}
return false;
};
})();
if ( supports('textShadow') ) {
document.documentElement.className += ' textShadow';
}
我的问题是:从他调用supports这个函数来看,是传了一个textShadow参数进去,而且prop默认是接受了这个参数值。但我搞不懂为什么可以这样传值。因为supports后面定义的函数是无参数的啊,那为什么prop就接受了textShadow这个值呢?
求大神解答!
这是一条镜像帖。来源:北邮人论坛 / www-technology / #23954同步于 2014/3/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
【求助】Javascript的一个问题
wislov
2014/3/25镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
var supports = (.......)();
这里其实定义了 supports 后是执行了 supports 函数,注意后面有个 ()。
所以,你可以认为 supports('textShadow') 展开后是 (function(....))('textShadow')
下面给你一个栗子:
var a = function() {
return function(b) {
console.log('inner ' + b);
};
};
a();
a()('textShadow');
【 在 wislov 的大作中提到: 】
: 这是网上找的一道前端题目:
: 当我们使用CSS3新属性,比如:box-shadow或者transition时,我们怎么检测浏览器是否支持这些属性?
: 请设计一个JavaScript函数,该函数接受一个CSS属性名作为参数,并返回一个boolean值,表明浏览器是否支持这个属性。
: ...................
谢谢,还给我举例说明!
【 在 Leavetaking 的大作中提到: 】
: : var supports = (.......)();
:
: ...................