前端js面试测试题,this指向性,闭包

前端js面试测试题:

JavaScript 测试题

问题描述:

@M-z
	(function(){
          
   
			var a=b=5		
					})();
	console.log(b);//b=5;
if( {
          
   a:1,b:2}=={
          
   a:1,b:2}){
          
   
				console.log(true)
				}else{
          
   
				console.log(false)
				}
			 //false; 因为两个对象的引用地址值不一致,虽然值相同
var m={
          
   x:1,y:2}
			n=m;
			n={
          
   x:100,y:200};
			console.log(m.x,n.y)
			// 1 100
function fn(){
          
   
								console.log(a);
									  console.log(foo());
									  var a=1;
									        function foo(){
          
   
									        	return 2;
									        }
						}
						fn()
						// undefined  2;
var a=[1,2,3];
					var b=JSON.parse(a);
					console.log(typeof b);
					console.log(typeof a);
					// b 为 object
					//a  为 string
1. var b=[];
    						 if(b[0]){
          
   
    						console.log(b==true);
    							}else{
          
   
    						console.log(this is + b[0])
    								}
    					//this is undefined
var person={
          
   
				   		1:98066,
				   		‘name-first’:john sun
				   };
				   console.log(person.1)
				  // Uncaught SyntaxError: Unexpected number
				 //应该是person[1];	
				 //如果以number类型作为对象的key值,需要写成	person["1"] 或者person[1]
var f=function g(){
          
   
				return 23;
			}
		console.log(f())
		// 23 类型number
		console.log(g)
		//Uncaught ReferenceError: g is not defined
var callback=function(){
          
   };
	console.log(typeof callback)
	//function
var obj=;
	Object.prototype.toString.call(obj) 检测出obj的类型是?
	//Object.protoype.toString.call(obj) 可以检测变量的类型
var y=18, rs="";
	if(y%4==0 || y%6!=0){
          
   
		rs="yes";		
	}else{
          
   
		rs="no";
	}
	console.log(rs);
	// no
var fn=function (f){
          
   
	 console.log(typeof f);
	 var f=2;
	 function f(){
          
   }
	 console.log(typeof f);
	}
	// function
	//number
var arr=[apple,orange,banner];
		console.log(arr.slice());
		console.log(arr)
		// [apple,orange,banner]
		//[apple,orange,banner]
		//并未截取数据
function superFn(){
          
   
					var x=0;
					 return function(){
          
   
					 	  x++;
					 	  console.log(x);
					 }
			}
			var s1=superFn();
			var  s2=superFn();
			s1();
			s1();
			s1();
			s2();
			//1
			//2
			//3
			//1
			//js 代码至上而下执行,这里没有异步过程 所以s1执行了,s2并没有执行
var name=global
		var obj={
          
   
			name:obj,
			sayName:function(){
          
   
				console.log(this.name);
			}
		}
	  obj.sayName();
	  var func=obj.sayName;
	  func();
	//考察this指向性 this指向的是最终调用的那个对象 
	//obj   obj调用了sayName() this指向obj
	//global 由于 func=obj.sayName 是个function , function 存在全局中, 那么func() 就是相当于 window.func() 实际上是window 调用func() this指向window this.name=window.name;
var a=1;
	function add(c){
          
   
		var b=2;
		var sum=a+b+c;
	}
	add(2)
	// undefined 因为没有返回结果 没有返回值 加个return 将返回结果
将值加入到数组最前面的方法是?
	1.push() 2.shift() 3.unshift() 4.pop()
	//push 是向后面添加,返回数组长度 shift删除第一个内容并且返回删除的数组,unshift是添加到第一位并且返回删除的数组 pop是删除数组最后的元素,并且返回删除的数组

原因分析:

<

经验分享 程序员 微信小程序 职场和发展