JavaScript题目大本营

版权声明:小能~~~~~ https://blog.csdn.net/qq_38398733/article/details/85998821

JavaScript题目大本营

1、考察this

	var length = 10;
	function fn() {
	  console.log(this.length);
	}
	
	var obj = {
	  length: 5,
	  method: function(fn) {
	    fn();
	    arguments[0]();
	  }
	};
	
	obj.method(fn, 1);

2、var和函数的提前声明

	// 一
	function fn(a) {
	  console.log(a);  //function
	  var a = 2;
	  function a() {}
	  console.log(a); 	// 2
	}
	
	fn(1);	

	// 二
	if (!("a" in window)) {
	    var a = 1;
	}
	alert(a); //undefined

	//三
	var a = 1,
    b = function a(x) {
        x && a(--x);
    };
	alert(a);	// 1

	//四 (函数声明会覆盖变量声明)
	function value(){
    	return 1;
	}
	var value;
	alert(typeof value); // function

	//五
	function value(){
	    return 1;
	}
	var value = 1;
	alert(typeof value); //number
	

3、局部变量和全局变量

	var f = true;
	if (f === true) {
	  var a = 10;
	}
	
	function fn() {
	  var b = 20;
	  c = 30;
	}
	
	fn();
	console.log(a);
	console.log(b);
	console.log(c);

4、变量隐式声明

	if('a' in window) {
	  var a = 10;
	}
	
	alert(a);

5、给基本类型数据添加属性,不报错,但取值是indefined

	var a = 10;
	a.pro = 10;
	console.log(a.pro + a);
	
	var s = 'hello';
	s.pro = 'world';
	console.log(s.pro + s);

6、函数声明优于变量声明

	console.log(typeof fn);
	function fn() {};
	var fn;

7、判断一个字符串中出现次数最多的字符,并统计次数(hash table方式)

	var s = 'aaabbbcccaaabbbaaa';
	var obj = {};
	var maxn = -1;
	var letter;
	for(var i = 0; i < s.length; i++) {
	  if(obj[s[i]]) {
	    obj[s[i]]++;
	    if(obj[s[i]] > maxn) {
	      maxn = obj[s[i]];
	      letter = s[i];
	    }
	  } else {
	    obj[s[i]] = 1;
	    if(obj[s[i]] > maxn) {
	      maxn = obj[s[i]];
	      letter = s[i];
	    }
	  }
	}
	
	alert(letter + ': ' + maxn);

8、经典闭包

	//dom污染法
	var lis = document.links;
    for(var i = 0, length = lis.length; i < length; i++) {
      lis[i].index = i;
      lis[i].onclick = function() {
        alert(this.index);
      };
    }
	//闭包
	var lis = document.links;
    for(var i = 0, length = lis.length; i < length; i++) {
      (function(i) {
        lis[i].onclick = function() {
          alert(i + 1);
        };
      })(i); 
    }

9、this

	function JSClass() {
	  this.m_Text = 'division element';
	  this.m_Element = document.createElement('div');
	  this.m_Element.innerHTML = this.m_Text;
	  this.m_Element.addEventListener('click', this.func);
	  // this.m_Element.onclick = this.func;
	}
	
	JSClass.prototype.Render = function() {
	  document.body.appendChild(this.m_Element);
	}
	
	JSClass.prototype.func = function() {
	  alert(this.m_Text);
	};
	
	var jc = new JSClass();
	jc.Render();  // add div
	jc.func();  // 输出 division element
	//click添加的div元素division element会输出underfined,为什么?

10、split

	//请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如: var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″
	function parseQueryString(url) {
	  var obj = {};
	  var a = url.split('?');
	  if(a.length === 1) return obj;
	  var b = a[1].split('&');
	  for(var i = 0, length = b.length; i < length; i++) {
	    var c = b[i].split('=');
	    obj[c[0]] = c[1];
	  }
	  return obj;
	}
	var url = 'http://witmax.cn/index.php?key0=0&key1=1&key2=2';
	var obj = parseQueryString(url);
	console.log(obj.key0, obj.key1, obj.key2);  // 0 1 2

猜你喜欢

转载自blog.csdn.net/qq_38398733/article/details/85998821