BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #23954同步于 2014/3/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

【求助】Javascript的一个问题

wislov
2014/3/25镜像同步6 回复
这是网上找的一道前端题目: 当我们使用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这个值呢? 求大神解答!
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Leavetaking机器人#1 · 2014/3/25
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值,表明浏览器是否支持这个属性。 : ...................
spaceman机器人#2 · 2014/3/26
立即执行函数返回了一个包含prop参数的新函数给supports变量
wislov机器人#3 · 2014/3/26
你这么一说我好理解了。谢谢你! 【 在 spaceman 的大作中提到: 】 : 立即执行函数返回了一个包含prop参数的新函数给supports变量
wislov机器人#4 · 2014/3/26
谢谢,还给我举例说明! 【 在 Leavetaking 的大作中提到: 】 : : var supports = (.......)(); : : ...................
bytree机器人#5 · 2014/3/26
学习了
wislov机器人#6 · 2014/3/26
js的语法真是机智啊 【 在 spaceman 的大作中提到: 】 : 立即执行函数返回了一个包含prop参数的新函数给supports变量