我是java脚本的新手,目前正在阅读John Resig的Pro javascript技术.在解释闭包时,他将调用 setTimeout("otherFunction()",2000)称为新JS开发人员遇到问题的实例.我不明白为什么这是一个问题?有人可以解释一下吗?在这个http://www.w3schools.com/js/js_timing.asp我看到一个var t=setTimeout("alertMsg()",3000);类似于我的电话.
private final List<KeyListener> keyListeners= new CopyOnWriteArrayList<KeyListener>();
public void addKeyListener(KeyListener keyListener){
keyListeners.add(keyListener);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我将keyListeners声明为final,也是线程安全的.我假设最终我的意思是听众的状态在施工后无法改变.但是我在addKeyListener()方法中没有做同样的事情吗?为什么编译器没有给我一个警告?我在这里错过了什么?
请注意以下代码:
public Period(Date start, Date end) {
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
if (this.start.compareTo(this.end) > 0)
throw new IllegalArgumentException(start +" after "+ end);
Run Code Online (Sandbox Code Playgroud)
}
我不知道compareTo()在防御性地将可变参数复制到构造函数之前检查参数的有效性(即调用)是否重要?