zoukankan      html  css  js  c++  java
  • JavaScript进阶

    函数

    1,普通函数
    	function(args){
    	
    		}
    
    
    2,匿名函数(顾名思义没有名字的函数)
    	setInterval("function()", 5000)
    	
    	
    	匿名函数:
    	setInterval(function(){
    		console.log('123');
    	
    	}, 5000)
    	
    	 
    3,自执行函数(创建函数并自动执行)
    
    	一般的函数需要定义,然后执行。
    	function func(){
    	
    	}      #  
    	//func()
    	
    	
    	自执行函数:
    	(function(args){
    		console.log(args)
    	})(1)
    	
    
    注意:自执行函数背景,之所以会有自执行函数,是因为当有大量第三方的插件时,会存在重名的函数从而造成冲突,而自执行函数则不管是否重名,都进行执行。
    

      

    序列化

      JSON.stringify() 将对象转换为字符串
      JSON.parse() 将字符串转换为对象

    转义

    decodeURI( )               		URl中未转义的字符
    decodeURIComponent( )  		 	URI组件中的未转义字符
    encodeURI( )                   	URI中的转义字符
    encodeURIComponent( )   		转义URI组件中的字符
    escape( )                       对字符串转义
    unescape( )                     给转义字符串解码
    URIError                        由URl的编码和解码方法抛出
    
    
    客户端(cookie) => 服务端
    将数据经过转义后,保存在cookie
    

      

    eval

    python:
    	val = eval(表达式)	# 执行不了逻辑代码(比如lambda表示式,for循环等无法执行),执行表达式有返回值,
    	exec(执行代码)    # 可以执行复杂的逻辑代码,但是没有返回值。
    	
    JavaScript:
    	eval(表达式或者代码) 是python中两种功能的合集
    

      

    时间

    Date类
    
    var d = new Date()
    
    d.getxxxx  	获取
    d.setxxxx	设置
    

      

    JavaScript作用域(必知必会)

    1, *********************以函数作为作用域*****************
    
    	其他语言:以代码块作为作用域(Java C#)
    	
    		public void Func(){
    			if 1==1{
    				string name = 'java'
    			}
    			console.writeline(name);
    		}
    		Func()
    		//报错,'name'没有定义。其他语言为块级作用域
    		
    		
    	python:
    	
    		情况一:
    	
    			def Func():
    				name='tom'
    			print(name)
    			
    			Func()
    			
    			//正常执行,python没有块级作用域。
    		
    		
    		情况二:
    		
    		def Func():
    				name='tom'
    			print(name)
    			
    		Func()
    		print(name)
    		//报错,'name'没有定义。
    		
    		
    	总结:其他语言是以块作为作用域,python和JavaScript是以函数作为作用域的。
    	
    
    		JavaScript:以函数作为作用域
    			function Func(){
    				if(1==1){
    					var name = 'java';
    				}
    			
    				console.log(name);
    			}
    			Func()
    			//成功
    
    
    
    2, **********************函数的作用域在函数未被调用之前就已经创建********************
    
    		function Func(){
    			if(1==1){
    				var name = 'java';
    			}
    		
    			console.log(name);
    		}
    
    
    3,**********************函数的作用域存在作用域链,并且也是在被调用之前创建**********
    
    		xo = 'alex'
    		function func(){
    			xo = 'eric';
    			function inner(){
    				xo = 'tony';
    				console.log(xo);
    			}
    			inner()
    		}
    		
    		func()
    		//输出: 'tony',遵循上述规则
    		
    		
    		xo = 'alex'
    		function func(){
    			xo = 'eric';
    			function inner(){
    				console.log(xo);
    			}
    			return inner;
    		}
    		
    		ret = func()
    		ret()
    		
    		//输出为:'eric'
    		
    		其实上述函数就相当于执行inner(),函数内部要打印xo,作用域链一次为: xo='alex'--->xo='eric',
    		由内向外去找,所以结果显然为'eric'
    		
    		
    		xo = 'alex'
    		function func(){
    			xo = 'eric';
    			function inner(){
    				console.log(xo);
    			}
    			xo = 'tony';
    			return inner;
    		}
    		
    		ret = func()
    		ret()
    		
    		//输出为:'tony'
    		
    		
    		分析:
    		
    		作用域链:
    		
    		1,首先执行最上面全局变量 xo='alex'
    		2,接着,函数func(不执行)加载内存,
    		3,开始执行ret=func()这一行,执行xo='eric',inner(不执行)加载内存,再向下走,xo='tony',此时的xo将取代上面的xo='eric',
    			然后返回inner函数
    		4, 接着向下走执行,ret=func(),此时的ret为innner, ret(),表示要执行inner(),所以结果为'tony'
    
    	
    4,***************************函数内局部变量: 声明提前*******************************
    
    		function func(){
    			console.log(xo);
    		}
    		func)();
    		// 程序直接报错
    		
    		
    		
    		function func(){
    			console.log(xo);
    			var xo = 'alex';
    		}
    		func)();
    		// 输出为:undefined
    		
    		
    		解释器在解释的过程中会找到所有的局部变量,执行var xo,相当于声明一个变量。
    		所以当xo一直没有被赋值,所有会输出undefined。
    		
    		
    		注意:这和上面的小例子之所以结果不同,注意执行流程。注意理解!!!
    

      

     JavaScript面向对象

    前奏:
    
    	function foo(){
    		var xo = 'alex';
    	}
    	foo()
    	
    	
    	function Foo(n){
    		this.name = n;   	#this就相当于python中的self,对象中封装的值为name
    	}
    	var obj = new Foo('we');		# 创建对象,创建对象前必须加new才表示创建对象,为固定用法。		
    	obj.name
    	
    
    
    
    JavaScript面向对象:
    	function Foo(n){
    		this.name = n;
    		this.sayName = function(){
    				console.log(this.name)
    			}
    	}
    	
    	var obj1 = new Foo('we');
    	obj1.name
    	obj1.sayName()
    	
    	var obj2 = new Foo('wwe');
    	obj2.name
    	obj2.sayName()
    	
    	
    	注意事项:
    		1,this代指对象(python self)
    		2,创建对象时用关键字: new 函数()
    	
    	
    	
    	由上可知:对象obj1,obj2都封装了方法sayName,造成了资源的浪费,下面来看看python中如何处理?
    
    
    
    python面向对象:
    
    	class Foo:
    	def __init__(self, name):
    		self.name = name
    		
    	def sayName(self):
    		print(self.name)
    		
    	obj1 = Foo('we')
    	obj2 = Foo('wwe')
    	
    	obj1,obj2分别只分装了name='we',name='wwe'。而方法sayName则保存在类中
    	
    	
    	
    下面开始对JavaScript进行改造:
    
    原型:
    
    	function Foo(n){
    		this.name = n;
    	}
    	
    	# Foo的原型
    	Foo.prototype = {
    		'sayName': function(){
    			console.log(this.name);
    		}
    	}
    	
    	obj1 = new Foo('we')
    	obj1.sayName()
    	
    	
    	注意:prototype为固定用法
    	执行流程:
    	obj1 = new Foo('we')即首先通过类创建对象,name封装到对象中,第二步当执行obj1.sayName时,则会去类中的
    	原型中去找,而不是去类中去找,因此减少了资源的浪费。注意:原型是放在类中的,这和python很类似。
    

      

  • 相关阅读:
    [Xcode 实际操作]六、媒体与动画-(2)使用图形上下文转换图片为灰度图
    [Xcode 实际操作]六、媒体与动画-(1)使用图形上下文按一定比例缩放图片
    [Xcode 实际操作]五、使用表格-(11)调整UITableView的单元格顺序
    [Xcode 实际操作]五、使用表格-(10)插入UITableView单元格
    [Xcode 实际操作]五、使用表格-(9)删除UITableView单元格(手势左滑调出删除按钮)
    [Xcode 实际操作]五、使用表格-(8)自定义UITableView单元格Accessory样式(附件图标)
    [Xcode 实际操作]五、使用表格-(7)UITableView单元格间隔背景色
    [Xcode 实际操作]五、使用表格-(6)UITableView滑动到指定单元格
    [Xcode 实际操作]五、使用表格-(5)设置UITableView的单元格背景颜色
    [Xcode 实际操作]五、使用表格-(4)设置UITableView单元格数据库源
  • 原文地址:https://www.cnblogs.com/yang-ning/p/7001295.html
Copyright © 2011-2022 走看看