function Foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1();
f1();
f2();
答案:010
/*(1)Function是引用类型:保存在堆中,变量f1,f2是保存在栈中;
(2)闭包:一个函数(产生新的作用域)定义的局部变量、子函数的作用域在函数内,但是一旦离开了这个函数,局部变量就无法访问,所有通过返回子函数到一个变量f1的方法,让f1指向堆中的函数作用域,这样可以使用局部变量i.
(3)过程:
第一次f1() :f1=Foo()中,先执行Foo(): i = 0,return值返回给f1(f1指向子函数 f1()=function(){.....},因为子函数没有 定义i,所以向上找到父函数定义的 i: )并执行子函数 输出i=0,再自加 i =1(覆盖了父函数Foo 的 i值);
第二次f1() : 执行的是子函数 Function(){ ..},输出的是父函数 的 i=1,再自加 i =2;
第一次f2():同第一次f1(),不同的是 f2指向堆中一个新的对象 function(){ ...},所有此i非彼i,输出i=0;如果再次f2(),那么和第二次f1(),一样输出i=1; */
//前两次子函数的i值指向的是同一个function对象,第三次指向的是一个新的function对象
//使用闭包把函数的局部变量驻留起来,函数执行完了也不会被销毁
//即使函数foo执行完毕,在子函数的执行环境往上找依然可以找到函数foo这个执行环境已经环境中的变量i。执行f1,开辟了一个内存,执行f2又开辟了一个内存,两个函数的i值分别存在与两个不同的作用域中。
<SCRIPT LANGUAGE="JavaScript">
var bb = 1;
function aa(bb) {
bb = 2;
alert(bb);
};
aa(bb);
alert(bb);
</SCRIPT>
答案:2 1
//
函数体内,bb并没有使用var来定义,按理说这个bb在预处理的时候应该是window的属性。但在这里,函数声明的时候,带了一个参数bb,也就是相当于在函数体内声明了var bb。所以,函数里的bb就是函数活动对象的属性。所以函数执行时会输出2。函数执行完后,函数的活动对象被销毁,也就是局部的这个bb被删除了,执行流进入到window,再输出bb,值就是1了。如果声明函数时,把参数那里的bb去掉,这段代码执行起来,结果就是弹出 2 2
1.效果
border-style:none;//无边框
border-width:0;//边框宽度为0px
2.区别
(1)性能差异
border:0;浏览器对border-width、border-color进行渲染,占用内存。
border:none;浏览器不进行渲染,不占用内存。
浏览器 的内核引擎,基本上是四分天下:
1)Trident: IE 以Trident 作为内核引擎;
2)Gecko: Firefox 是基于 Gecko 开发;
3)WebKit: Safari, Google Chrome,傲游3,猎豹浏览器,百度浏览器 opera浏览器;
4)Presto: Opera的内核,但由于市场选择问题,主要应用在手机平台--Opera mini
以 下语句的执行结果是什么?
答案: ‘one’’three’’two’
one第一个执行就不用说了,而后面的函数用了settimeout,这个函数是指定毫秒数后调用函数或者是计算表达式的,而settimeout设置为0s,你以为他会马上执行?其实他被js放在队列中了,要等别人执行完了,他才会执行。
回调时,被回调的函数会被放在event loop里,等待线程里的任务执行完后才执行event loop里的代码。
以下 javascript 代码,在浏览器中运行的结果是
答案: 首先全部输出first,然后全部输出second
js 是运行于单线程环境中,定时器作用是在规定时间内将事件加入执行队列,而加入的前提是当前事件队列没有任何东西,否则会优先执行队列里的任务
所以是过了5毫秒把定时器里的函数添加到事件队列中,而不是过了5毫秒就立即执行它。因为打印first事件队列是先于定时器的函数的,因此即使5毫秒后,还是会先把first打印完再往后执行。
if(! "a" in window){
var a = 1;
}
alert(a);
答案:undefined
//javascript只有函数作用域, 没有块作用域,所以在if 里面的赋值语句
var a = 1;
分两步
var a ; //这个声明语句会被提升到代码顶部。
if(! 'a' in window)
//因为! 比 in 的优先级高,所以这个判断式等价 (!'a') in window, 结果为false,
//所以不会执行赋值语句
//alert(a) 返回 undefined
display:none与visibility:hidden区别:
display:none与visibility:hidden都可以用来隐藏某个元素。
display:none在隐藏元素的时候,将其占位空间也去掉;而visibility:hidden只是隐藏了内容而已,其占位空间仍然保留。