前端面试必问题
**1.如何理解什么是闭包?
2.前端的设计思想?
3.如何面向对象编程?
4.如何理解面向对象编程和面向过程编程?**
5.什么是链式作用域结构?
6.prototype和proto的区别
1.如何理解什么是闭包?
我的理解就是一个函数内部嵌套一个函数,内部函数f2调用外部函数f1变量,从而返回值,来获取f1函数的值,然而
函数f1被调用完啦,f2定义的变量还是存在内存中,没有被垃圾回收*回收(想一下f1函数嵌套f2函数这个例子)
阮一峰:
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
答:1.变量作用域
变量作用域:全局变量和局部变量
js的特别之处:函数内部可以直接读取全局变量,但是
在函数外部无法读取函数内部的局部变量。
注意点:在函数内部声明变量的时候,一定要使用var命令。
如果不用的话,实际上声明的是一个全局变量
2.由于在javascript中,只有函数内部的子函数才能读取局部变量,
所以说,闭包可以简单理解成“定义在一个函数内部的函数”。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁
3.这些变量的值始终保持在内存中,不会在发生调用后被自动清除,不会被垃圾回收机制回收,
内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄漏。
解决方法是,在退出函数之前,将不使用的局部变量全部删除
2.前端的设计思想?
前端开发核心思想:
1.表现(css)、内容(html)、行为(js)的分离
2.标记应该是结构良好、语义正确以及普遍合法。
3.Javascript应该起到渐进式增强用户体验的作用。
3.如何面向对象编程?
4.如何理解面向对象编程和面向过程编程?
5.什么是链式作用域结构?
函数f2被包括在函数f1内部,f1内部的所有局部变量,对f2都是可见的。但是f2
内部的局部变量,对f1就是不可见的
对于外部读取函数内部的局部变量就是在嵌套一个子的函数,使它变为父亲函数
6.prototype和_proto_的区别
参考网址:原型对象与原型链
https://www.cnblogs.com/shuiyi/p/5305435.html
prototype是函数才有的属性
_proto_是每个对象都有的属性
但_proto_不是一个规范属性,只是部分浏览器实现了此属性,对应的标准属性是[prototype]
注:大多数情况下,_proto_可以理解为"构造器的原型",即:
_proto_ === constructor.prototype
var a = {};
console.log(a.prototype); //undefined
console.log(a.__proto__); //Object {}
var b = function(){}
console.log(b.prototype); //b {}
console.log(b.__proto__); //function() {}
下一篇: python基础-----六种数据类型