IT不死旗下博客隆重开通啦,欢迎各位小伙伴们来围观 。

关于JS中的一些面试题

Javascript Xueqi 1188℃ 0评论

一些前端的笔试题: 持续更新中
更新于 2016-12-4 23:23:44

window.onload=function(){

var foo=1;
function test(){
   foo=10;
   return;
   function foo(){}
}

test();
alert(foo); //为什么结果是 1 ,这里的原因也是变量声明提升,函数foo的声明虽然写在下面,
// 但是实际上是把声明放到了最上面,所以foo=10是给test函数里的局部变量赋的值,所以并没有改变函数外面全局变量的值,后面的输出自然是原来的那个值
相当于这样的代码:
var foo=1;
funciton test(){
var foo; //函数名也是变量名--这里是函数/变量的声明
foo=10;
return ;
foo=funciton(){}; //函数的赋值
}
}
console.log([] == false); // true
console.log([] == ![] ) ; // true

<script type="text/javascript">
  var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
    console.log(this);
   return function(){
      console.log(this.name);
      console.log(this);
      return this.name;
   };
  }
};

console.log(object.getNameFunc()()); //The Window

</script>
Js代码

1.
parseInt(string, radix); // 函数可解析一个字符串,并返回一个整数。
radius是基数,可以是2-36
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
案例:
var res1=parseInt(3,10); // 将3当做10进制来解析,值为3
var res2=parseInt(3,2); // 将3当做2进制来解析,但是3不是正确的二进制数据,转换失败,返回NAN
var res3=parseInt(3,0); // 基数0和10的效果是一样的,当做10进制来解析,值为3
var res3=parseInt(3,1); // 奇数小于2,又不为0,根据规则,返回NAN
2.js的异步执行问题,JS是单线程的,setTimeout的用法: 
案例: ---待思考
var a=10;
setTimeout(function(){
console.log(a);
a=999;
},0);
console.log("11111");
console.log("22222");
console.log("22222");
a=998; //后面的赋值中
问:执行这段代码后,控制台如何输出,主要是a的值等于多少
答案是 998 即后面的赋值生效了
问题:事实上,浏览器是这样输出的:
11111
22222
33333
998
即使后面再执行几个方法,把给a赋值的操作放在后面,同样也是会执行到那里,
最后再输出setTimeout里的a的值,那倒计时定时器的时间设置为0时,它到底什么时候执行????

即使是这样写: 也是输出的2
var a=1;
function sayHi(){
console.log("我是sayHi·····");
}
setTimeout(function(){
console.log(a);
//var a=998;
},0);
console.log("111111111111111");
console.log("2222222222222222");
console.log("3333333333333333");
console.log("444444444444444444");
sayHi();
sayHi();
sayHi();
a=2;
看这篇文章:  

setTimeout等于0时发生了什么

3.JS存在一个函数,变量声明提升的过程(即JS的执行过程是先编译,后执行的) var a=9; function test(){ console.log(a); var a=10; } test(); // 问,输出的a是多少? 正确的结果是undefined 分析:js中,是先编译,后执行的,编译的过程中对变量,函数进行声明,再执行的过程中,再对变量赋值 相当于这样写: var a=9; function test(){ var a; //对于声明了尚未进行赋值的变量,JS中的默认值为undefined console.log(a); a=10; } //根据js的作用域链,在函数的内部找到了变量a,就使用它了,它的值为undefined test(); 4.this 的问题: var Obj={ firstName:"ZDL", say:function(){ console.log(this); console.log(this.firstName); } } var func=Obj.say; console.log(Obj.firstName); func(); // window对象 undefined //这里相当于 window.func() , 此时,this指向window对象了,而window对象并没有name属性,所以输出了undefined

转载请注明:凌风阁 » 关于JS中的一些面试题

喜欢 (13)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址