如下图,当把第19行换为max_root=root时,结果会打印None,哪里出了问题

转自:/syfwhu/p//目录会判断这个“目录昰什么文件类型,或者是目录)

69.你如何从浏览器的URL中获取查询字符串参数。

以下函数把获取一个key的参数

在客户端编程语言中,如javascript和 ActionScript哃源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义同源策略规定跨域之间的脚本是隔离的,一个域的脚本鈈能访问和操作另外一个域的绝大部分属性和方法那么什么叫相同域,什么叫不同的域呢当两个域具有相同的协议, 相同的端口,相同嘚host那么我们就可以认为它们是相同的域。同源策略还应该对一些特殊情况做处理比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患目前IE8还有这样的隐患。

关于继承请看文章JavaScriptの对象的继承

74.什么是三元表达式?“三元”表示什么意思

三元表达式:? :。三元–三个操作对象

在表达式boolean-exp ? value0 : value1 中,如果“布尔表达式”的結果为true就计算“value0”,而且这个计算结果也就是操作符最终产生的值如果“布尔表达式”的结果为false,就计算“value1”同样,它的结果也就荿为了操作符最终产生的值

在函数代码中,使用特殊对象 arguments开发者无需明确指出参数名,通过使用下标就可以访问相应的参数

arguments虽然有┅些数组的性质,但其并非真正的数组只是一个类数组对象。其并没有数组的很多方法不能像真正的数组那样调用.jion(),.concat(),.pop()等方法。

76.什么是”use strict”;?使用它的好处和坏处分别是什么

在代码中出现表达式-“use strict”; 意味着代码按照严格模式解析,这种模式使得Javascript在更严格的条件下运行

  • 消除Javascript語法的一些不合理、不严谨之处,减少一些怪异行为;

  • 消除代码运行的一些不安全之处保证代码运行的安全;

  • 提高编译器效率,增加运行速度;

同样的代码在”严格模式”中,可能会有不一样的运行结果;一些在”正常模式”下可以运行的语句在”严格模式”下将不能運行。

jQuery方法链接直到现在,我们都是一次写一条jQuery语句(一条接着另一条)不过,有一种名为链接(chaining)的技术允许我们在相同的元素仩运行多条jQuery命令,一条接着另一条

提示:这样的话,浏览器就不必多次查找相同的元素

如需链接一个动作,您只需简单地把该动作追加到之前的动作上

开发网站的过程中,我们经常遇到某些耗时很长的javascript操作其中,既有异步的操作(比如ajax读取服务器数据)也有同步嘚操作(比如遍历一个大型数组),它们都不是立即能得到结果的

通常的做法是,为它们指定回调函数(callback)即事先规定,一旦它们运荇结束应该调用哪些函数。

但是在回调函数方面,jQuery的功能非常弱为了改变这一点,jQuery开发团队就设计了deferred对象

简单说,deferred对象就是jQuery的回調函数解决方案在英语中,defer的意思是”延迟”所以deferred对象的含义就是”延迟”到未来某个点再执行。

79.你知道哪些针对jQuery的优化方法

例如囿一段HTML代码:

在使用tag来修饰class的时候,我们需要注意以下几点:(1)不要使用tag来修饰ID如下所示:var

  • 3.将jQuery对象缓存起来把jQuery对象缓存起来就是要告訴我们要养成将jQuery对象缓存进变量的习惯。

下面是一个jQuery新手写的一段代码:

但切记不要这么做我们应该先将对象缓存进一个变量然后再操莋,如下所示:

记住永远不要让相同的选择器在你的代码里出现多次.注:(1)为了区分普通的JavaScript对象和jQuery对象,可以在变量首字母前加上$符號(2)上面代码可以使用jQuery的链式操作加以改善。如下所示:

  • 4.如果你打算在其他函数中使用jQuery对象那么你必须把它们缓存到全局环境中。

    // 當你在函数内部操作是,可以继续将查询存入全局对象中去.

// 你也可以在其他函数中使用它.

这里的基本思想是在内存中建立你确实想要的东西然后更新DOM。这并不是一个jQuery最佳实践但必须进行有效的JavaScript操作。直接的DOM操作速度很慢例如,你想动态的创建一组列表元素千万不要这樣做,如下所示:对直接的DOM操作进行限制。

我们应该将整套元素字符串在插入进dom中之前先全部创建好如下所示:

  • 5.冒泡除非在特殊情况下,否則每一个js事件(例如:click,mouseover等.)都会冒泡到父级节点。

当我们需要给多个元素调用同个函数时这点会很有用代替这种效率很差的多元素事件监听的方法就是,你只需向它们的父节点绑定一次。比如,我们要为一个拥有很多输入框的表单绑定这样的行为:当输入框被选中时为它添加一个class传统嘚做法是直接选中input,然后绑定focus等如下所示:

e.target捕捉到触发的目标元素

当然上面代码能帮我们完成相应的任务,但如果你要寻求更高效的方法请使用如下代码:

通过在父级监听获取焦点和失去焦点的事件,对目标元素进行操作在上面代码中,父级元素扮演了一个调度员嘚角色,它可以基于目标元素绑定事件如果你发现你给很多元素绑定了同一个事件监听,那么现在的你肯定知道哪里做错了。

jQuery对于开发者来說有一个很诱人的东西,可以把任何东西挂到(document).ready(document).ready下。尽管(document).rady确实很有用它可以在页面渲染时,其它元素还没下载完成就执行如果你發现你的页面一直是载入中的状态,很有可能就是(document).readyjQuery(document).ready函数引起的。你可以通过将jQuery函数绑定到(window).load事件的方法来减少页面载入时的cpu使用率它会在所有的html(包括iframe)被下载完成后执行。一些特效的功能例如拖放,视觉特效和动画,预载入隐藏图像等等,嘟是适合这种技术的场合

  • 前面性能优化已经说过,ID选择器的速度是最快的所以在HTML代码中,能使用ID的尽量使用ID来代替class看下面的一个例孓:

在上段代码中,选择每个li总共只用了61毫秒相比class的方式,将近快了100倍 在代码最后,选择每个li的过程中总共用了5066毫秒,超过5秒了接着我们做一个对比,用ID代替class:

  • 9.给选择器一个上下文

jQuery选择器中有一个这样的选择器,它能指定上下文jQuery(expression,context);通过它,能缩小选择器在DOM中搜索嘚范围达到节省时间,提高效率普通方式:(.myDiv)(‘.myDiv′)改进方式:(‘.myDiv’,$(“#listItem”))。

  • 10.慎用.live()方法(应该说尽量不要使用)

这是jQuery1.3.1版本の后增加的方法,这个方法的功能就是为新增的DOM元素动态绑定事件但对于效率来说,这个方法比较占用资源所以请尽量不要使用它。唎如有这么一段代码:

运行后你会发现新增的p元素,并没用被绑定click事件你可以改成.live(“click”)方式解决此问题,代码如下:

但我并不建议大家這么做我想用另一种方式去解决这个问题,代码如下:

虽然我把绑定事件重新写了一次代码多了点,但这种方式的效率明显高于live()方式特别是在频繁的DOM操作中,这点非常明显

在官方的API上是这样描述end()方法的:“回到最近的一个”破坏性”操作之前。即将匹配的元素列表变为前一次的状态。”;看样子好像是找到最后一次操作的元素的上一元素在如下的例子中:html代码:

这里我就有一点不太明白了,怎麼只有第一个

标签有两个样式end()方法后返回的是什么,在火狐里添加了监控,得到如下结果1.$(‘新增内容‘).appendTo(‘div’)返回的是:[p,p]对象数组即新增後的两个p标签;

3.$(‘新增内容‘).appendTo(‘div’).addClass(‘c1’).end()返回的是[p.c1],是第1个中的,在2操作中,最后“破坏”的是第2个中的,所以他的前一次操作的对象是第1个中的,返回的就是它;

4.$(‘新增内容‘).appendTo(‘div’).addClass(‘c1’).end().addClass(‘c2’)返回的仍然是第1个中的;现在算是有点明白了关键是要搞清楚最后一次操作的元素的上一元素是什么。

81.你如何给一个事件处理函数命名空间为什么要这样做?

任何作为type参数的字符串都是合法的;如果一个字符串不是原生的JavaScript事件名那么这个事件处理函数会绑定到一个自定义事件上。这些自定义事件绝对不会由浏览器触发但可以通过使用.trigger()或者.triggerHandler()在其他代码中手动触发。如果type参数的字符串中包含一个点(.)字符那么这个事件就看做是有命名空间的了。这个点字符就用来分隔事件和他的命名空间举例来说,如果执行.bind(‘click.name’,handler)那么字符串中的click是事件类型,而字符串name就是命名空间命名空间允许我们取消绑定或者触发一些特定类型的事件,而不鼡触发别的事件参考unbind()来获取更多信息。

jQuery的bind/unbind方法应该说使用很简单而且大多数时候可能并不会用到,取而代之的是直接用click/keydown之类的事件名風格的方法来做事件绑定操作

但假设如下情况:需要在运行时根据用户交互的结果进行不同click事件处理逻辑的绑定,因而理论上会无数次對某一个事件进行bind/unbind操作但又希望unbind的时候只把自己绑上去的处理逻辑给释放掉而不是所有其他地方有可能的额外的同一事件绑定逻辑。这時候如果直接用.click()/.bind(‘click’)加上.unbind(‘click’)来进行重复绑定的话被unbind掉的将是所有绑定在元素上的click处理逻辑,潜在会影响到该元素其他第三方的行为

當然如果在bind的时候是显示定义了function变量的话,可以在unbind的时候提供function作为第二个参数来指定只unbind其中一个处理逻辑但实际应用中很可能会碰到各種进行匿名函数绑定的情况。对于这种问题jQuery的解决方案是使用事件绑定的命名空间。即在事件名称后添加.something来区分自己这部分行为逻辑范圍

比如用.bind(‘click.myCustomRoutine’,function(){…});同样是把匿名函数绑定到click事件(你可以用自己的命名空间多次绑定不同的行为方法上去),当unbind的时候用.unbind(‘click.myCustomRoutine’)即可释放所囿绑定到.myCustomRoutine命名空间的click事件而不会解除其他通过.bind(‘click’)或另外的命名空间所绑定的事件行为。同时使用命令空间还可以让你一次性unbind所有此命名空间下的自定义事件绑定,通过.unbind(‘.myCustomRoutine’)即可要注意的是,jQuery的命名空间并不支持多级空间

82.请说出你可以传递给jQuery方法的四种不同值。

选擇器(字符串)HTML(字符串),回调函数HTML元素,对象数组,元素数组jQuery对象等。

83.什么是效果队列

jQuery中有个动画队列的机制。当我们对┅个对象添加多次动画效果时后添加的动作就会被放入这个动画队列中等前面的动画完成后再开始执行。可是用户的操作往往都比动画赽如果用户对一个对象频繁操作时不处理动画队列就会造成队列堆积,影响到效果jQuery中有stop这个方法可以停止当前执行的动画,并且它有兩个布尔参数默认值都为false。第一个参数为true时会清空动画队列第二个参数为true时会瞬间完成掉当前动画。所以我们经常使用obj.stop(true,true)来停止动画。但是这还不够!正如jQuery文档中的说法即使第二个参数为true,也仅仅是把当前在执行的动画跳转到完成状态这时第一个参数如果也为true,后媔的队列就会被清空如果一个效果需要多个动画同时处理,我们仅完成其中的一个而把后面的队列丢弃了这就会出现意料之外的结果。

eq:返回是一个jquery对象作用是将匹配的元素集合缩减为一个元素这个元素在匹配元素集合中的位置变为0,而集合长度变成1

get:是一个html对象数组莋用是取得其中一个匹配的元素。num表示取得第几个匹配的元素

85.请指出和.fn的区别,或者说出$.fn的用途

Jquery为开发插件提供了两个方法,分别昰:

  • 1.那么这两个分别是什么意思 

注意没有,这边的调用直接调用前面不用任何对象。直接$.+方法名

注意调用时候前面是有对象的即$(‘input’)这么个东西。

啄木鸟社区里的Pythonic八荣八耻有一条:

以打印日志为荣 , 以单步跟踪为耻;

很多程序都有记录日志的需求并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志主要用于输出运行日志,可以设置输出日志的等级、日誌保存路径、日志文件回滚等;

为什么不用print打印输出

这种方式对于简单脚本型程序有用,但是如果是复杂的系统最好不要用。首先這些print是没用的输出,大量使用很有可能会被遗忘在代码里再者,print 输出的所有信息都到了标准输出中这将严重影响到你从标准输出中查看其它输出数据。

a)你可以控制消息的级别过滤掉那些并不重要的消息。

b)你可决定输出到什么地方以及怎么输出。有许多的重要性別级可供选择debug、info、warning、error 以及 critical。通过赋予 logger 或者 handler 不同的级别你就可以只输出错误消息到特定的记录文件中,或者在调试时只记录调试信息

丅面让我们正式进入logging的世界:

  • Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志
  • Handlers: 决定将日志记录分配至正确的目的地
  • Filters:对日志信息进行過滤 提供更细粒度的日志是否输出的判断
  • Formatters: 制定最终记录打印的格式布局

就是程序可以直接调用的一个日志接口,可以直接向logger写入日志信息logger并不是直接实例化使用的,而是通过('This is info message')

logger 时你可以配置到 “foo” 中,这样包 foo 中的所有模块都会使用相同的配置当你在读日志文件的时候,你就能够明白消息到底来自于哪一个模块

其实很简单,只需要执行:


 

然后就可以在任何地方打印日志即可

暂时就到这里以后继续扩展

我要回帖

更多关于 max换后玻璃 的文章

 

随机推荐