js错题集

来源:互联网 发布:win10安装网络打印机 编辑:程序博客网 时间:2024/06/06 03:34
  • 下面这个JS程序的输出是什么:
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
  • border:none以及border:0的区别
1.效果border-style:none;//无边框         border-width:0;//边框宽度为0px  2.区别(1)性能差异border:0;浏览器对border-widthborder-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’’twoone第一个执行就不用说了,而后面的函数用了settimeout,这个函数是指定毫秒数后调用函数或者是计算表达式的,而settimeout设置为0s,你以为他会马上执行?其实他被js放在队列中了,要等别人执行完了,他才会执行。   回调时,被回调的函数会被放在event loop里,等待线程里的任务执行完后才执行event loop里的代码。
  • 以下 javascript 代码,在浏览器中运行的结果是
    这里写图片描述
答案: 首先全部输出first,然后全部输出second  js 是运行于单线程环境中,定时器作用是在规定时间内将事件加入执行队列,而加入的前提是当前事件队列没有任何东西,否则会优先执行队列里的任务  所以是过了5毫秒把定时器里的函数添加到事件队列中,而不是过了5毫秒就立即执行它。因为打印first事件队列是先于定时器的函数的,因此即使5毫秒后,还是会先把first打印完再往后执行。
  • 请问 a 的结果是什么?
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:nonevisibility:hidden都可以用来隐藏某个元素。 display:none在隐藏元素的时候,将其占位空间也去掉;而visibility:hidden只是隐藏了内容而已,其占位空间仍然保留。
原创粉丝点击