var myobject = { foo: "bar", func: function() { var self = this; console.log("outer func:this.foo=" + this.foo);//bar console.log("outer func:self.foo=" + self.foo); //bar (function() { console.log("outer func:this.foo=" + this.foo); //undefined,函数没有调用者时候,this指向window console.log("outer func:self.foo=" + self.foo); //bar })() } } myobject.func();
在 JavaScript 中,上下文对象就是 this 指针,即被调用函数所处的环境。上下文对象 的作用是在一个函数内部引用调用它的对象本身.
在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
因此this.foo=undefined;self.foo=bar
同理换一种调用方法:
foo="test"; func=myobject.func(); func(); /*打印结果 outer func:this.foo=test outer func:self.foo=test outer func:this.foo=test outer func:self.foo=test
this和self都是window,但是因为定义了全局变量,因此都能找到.foo的值
3.随机生成颜色
function getRandomColor(){ var colorch="#"; for(var i=0;i<6;i++){ var a=Math.random(); var choose=[1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'] var num=Math.round(a * 15); colorch+=choose[num]; } return colorch; }
4.至少写5个前端优化的方法
1.减少HTTP请求和请求资源大小(合并图片,用如 YUI Compressor等工具瘦身JS和CSS文件,合并多个CSS文件,合并多个JS文件,图片多时用lazyLoad,压缩图片大小)
2.减少DOM操作(例如用innerHTML="<a href>link<a>"这种方式取代createElement等DOM操作)
3.使用CDN内容分布网络(例如jquery,用户在访问其他网站时可能从微软的CDN下载过Jquery文件放在缓存中,这样你的页面使用jquery不必再请求一次jquery文件)
4.用JSON代替XML来存储和交换数据
5.减少不合理嵌套(如table的td里套table,或者body ul li a这种)
6.减少Cookie(因为每次加载页面都会读本地Cookie)
7.使用HTML5本地缓存机制
8.先加载HTML页面结构,再进行表现层渲染,最后加载JS(CSS外链放头部,JS外链放尾部,因为请求JS会阻塞其他资源的下载请求)
5.实现数字千分位
function comdify(num){ var ch=num.toString(); var len=ch.length; if(len>3){ for(var i=len-3;i>0;i-=3){ ch=ch.substr(0,i)+","+ch.substr(i,len-1); len++; } } return ch; }
6.域名劫持
域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。
域名解析(DNS)的基本原理是把网络地址(域名,以一个字符串的形式)对应到真实的计算机能够识别的网络地址(IP地址,比如216.239.53.99 这样的形式),以便计算机能够进一步通信,传递网址和内容等。
由于域名劫持往往只能在特定的被劫持的网络范围内进行,所以在此范围外的域名服务器(DNS)能够返回正常的IP地址,高级用户可以在网络设置把DNS指向这些正常的域名服务器以实现对网址的正常访问。所以域名劫持通常相伴的措施——封锁正常DNS的IP。
如果知道该域名的真实IP地址,则可以直接用此IP代替域名后进行访问。比如访问谷歌 ,可以把访问改为http://216.239.53.99/ ,从而绕开域名劫持。