Extjs 基础篇—— Function基础
这里主要是JS的基础知识,也是深入理解Ext的基础。
1.参数可变长,注意跟Java还是有一点区别的。
例:
1.function getUser(name,age){2.alert("name: "+name + " age: "+age);3.}调用方法:getUser(); // 可以不传参数
getUser("cat"); // 可以只传递一个参数
getUser("cat",20); // 传两个参数
getUser("cat",20,2,"dog"); // 传两个以上的参数
2.不给函数定义形参,直接在函数中使用arguments属性获取实际传递的参数数组。
例:
1.function getUser(){2.var args = arguments;3.alert(args.length);4.alert(args[0]);5.}3.js函数不能重载.因为,JS函数的参数是可变长的,从代码意义上来说就没有重载。另外,JS是一种解释执行的语言,浏览器脚本引擎开始载入JS代码的时候,必须先“扫描”然后才开始解释执行。在这个过程中,有一个重要的操作就是“标识符解析”,要求同一命名空间不允许同名变量的存在,包括函数名。
例:
1.function getUser(){2.alert("hello!");3.}4.function getUser(name){5.alert("sorry!");6.}7.getUser(); // 结果永远是 sorry!4.命名空间:Java我们用package edu.ouc.wy来定义,JS中则需要我们一层一层的定义。
1.var edu = {};2.var edu.ouc = {};3.var edu.ouc.wy = {};5.JS支持函数嵌套
例:
1.function outerFn(){2.function innerFn(){3.alert("innerFn test..");4.}5.alert("outerFn test...");6.}7.outerFn(); // 结果弹出来两个窗口6.既然有了函数嵌套,我们就有从outerFn外部调用innerFn函数的需求
例:
1.function outerFn(){2.function innerFn(){3.alert("innerFn test..");4.}5.return innerFn();6.}7.var cacheFn = outerFn();8.cacheFn();一般来说,“外层”作用域中的代码是无法访问“内层”作用域的。但是通过return一个函数的方式,可以让函数“穿越”作用域的限制,从而让外层作用域能够“触摸”到“内层”的函数和变量。
例:
01.var outerName = "cat";02.function outerFn(){03.var name = "dog";04.function innerFn(){05.alert("outername: "+outerName + " innername: "+name);06.}07.return innerFn;08.}09.var cacheFn = outerFn();10.cacheFn(); // 结果为 outername: cat innername: dog7.JS中函数既是数据
例:
1.function testFn(){2.alert("test function..");3.}4.alert(testFn); // 显示的结果和上面这三行是一样的例:
1.testFn = function(){2.alert("test function..");3.}4.alert(testFn); // 效果和上一个例子是一样的两者的不同是:前者直接声明了一个函数,在脚本引擎的解析期间,这个函数就会被创建。
而后者相当于是定义了一个变量,因此只有在脚本真正执行到这一行的时候,函数才会被构建出来。
8.函数作为对象的属性,动态的添加和删除
例:
1.var obj = {};2.obj.testFn = function(){3.alert("test func..");4.}5.obj.testFn(); // 括号()的目的是让testFn这个属性(函数)执行6.delete obj.testFn;7.obj.testFn(); // 报错9.函数也是对象,也有自己的类:Function
例1:
1.var testFn = new Function('name','alert(my func...)');2.testFn(); // 结果 my func...Function:可以接受任意多个参数,只有最后一个参数被当做“函数体”。使用new Function()方式创建的函数,是在运行时才创建。并且他的作用域是“顶级作用域”,即window
例:
1.function outerFn(){2.var name = "cat";3.var innerFn = new Function("alert(name)");4.return innerFn;5.}6.var cacheFn = outerFn();7.cacheFn(); // 结果报错,因为在window作用域中,找不到name变量例2:
1.var myFn = function(){}2.myFn.name = "cat";3.alert(myFn.name); // cat4.delete myFn.name;5.alert(myFn.name); // 空10.三种特殊形式的函数调用:call,apply,()
例:
1.function myFn(){2.alert(this.name);3.}4.myFn.call({name:"cat"}); // 结果为cat5.myFn.apply({name:"dog"}); // 结果为dog结果很奇怪:两次this.name居然不一样。这就是JS是动态语言的意义所在,不要被Java思想所束缚。对于JS来说,函数中的this并不一定指向特定的对象,它是可变的。(这句很重要)
call和apply都能执行函数并给this传递参数。两者相同点:他们都可以接受两个参数,第一个参数为函数中this需要绑定的对象。不同点:call的第二个参数是可变长参数,apply的第二个参数是数组。
例:
1.function myFn(a,b){2.return a+b;3.}4.myFn.call({},1,2);5.myFn.apply({},[1,2]);6.例:(function(){7.alert("my func..");8.})();结果这个函数自己就执行了。
11.我们知道了函数也是对象。也用过了arguments这个原生属性。JS为函数对象提供了很多原生的属性,包括arguments,callee,caller,length,prototype等
例1:
01.function myFn(){02.var s = "";03.var len = arguments.length;04.for(var i=0; i<len; i++){05.s += arguments[i]; // 注意arguments不是数组,而是对象06.}07.alert(s);08.}09.myFn(1,2,3,4,5);例2:
1.function fact(n){ // n的阶乘2.if(n==1){3.return 1;4.}else{5.return n * arguments.callee(n-1);6.}7.}callee在arguments属性中定义,并且它指向函数自己,可以用于递归调用。
例3:
1.function worker(){2.alert(worker.caller); // 将会输出boss函数的代码,因为没有给他加(),3.// 否则将报错too much recursion4.}5.function boss(){6.worker();7.}8.boss();Extjs 基础篇—— Function基础的更多相关文章
- iOS开发基础篇-Button基础
一.简单介绍 UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态 UIControlStateNormal :普通状态,为默认情 ...
- Extjs 基础篇—— Function 能在定义时就能执行的方法的写法 function(){...}()
Ext.js 中 Function能在定义时就能执行的方法的写法 function(){...}() /** * 第二部分Function:能在定义时就能执行的方法的写法 function(){... ...
- javascript基础篇--function类型(上)
在js中,function类型实际上是对象,每一个函数都是function类型的一个实例.并且与其它引用类型一样具有属性和方法. 声明 1普通方式 Function sum(num1,num2) { ...
- JavaSE基础篇—MySQL基础知识点
MySQL MySQL是一种关系数据库管理系统,是一种开源软件.可搭配PHP和Apache可以有更好的性能,也可以工作在众多的平台上.Orcale是一个数据库创建多个用户,MySQL是一个用户创建多个 ...
- Python学习之路基础篇--08Python基础+ 文件的基本操作和 注册小作业
1 文件的基本操作 #1. 打开文件的模式有(默认为文本模式): r ,只读模式[默认模式,文件必须存在,不存在则抛出异常] w,只写模式[不可读:不存在则创建:存在则清空内容] a, 只追加写模式[ ...
- python基础篇_002_基础数据类型
Python基础数据类型 1.int # int 用于计算 num = 3 # int 与其他数据类型转换 int_to_str = str(num) # 数字加引号 print(int_to_str ...
- Python学习之路基础篇--02Python基础+小作业
1 变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码调用.必须由数字,字母,下划线任意组合,且不能数字开头.不能是python中的关键字,如['and', 'as', 'assert', ...
- 学习笔记三:基础篇Linux基础
Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...
- 1.Ceph 基础篇 - 存储基础及架构介绍
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485232&idx=1&sn=ff0e93b9 ...
随机推荐
- 【CF438E】小朋友和二叉树 解题报告
[CF438E]小朋友和二叉树 Description 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树. 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\dots,c_n\). ...
- Python 使用CPickle和pickle模块进行序列化和反序列化
#Cpickle使用C语言进行编写的相比pickle来说效率高很多 #-*-coding:utf-8-*-'''序列化操作'''try: import cPickle as pickleexce ...
- 为什么redis支持lua脚本功能
看看大家怎么说! 参考: (1)描述界面:WOW和剑网三的界面都是用LUA写的: (2)沟通引擎:游戏图形引擎提供了一些接口库,可以在LUA中调用: (3)服务器端:有些游戏,例如剑网三,在服务器端也 ...
- python数据结构(1)
四种内建的数据结构:List.Tuple.Dictionary以及Set. 1.列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. (1).创 ...
- 科学计算三维可视化---Mayavi入门(Mayavi管线)
一:Mayavi管线 mlab.show_pipeline() #显示管线层级,来打开管线对话框 (一)管线中的对象scene Mayavi Scene:处于树的最顶层的对象,他表示场景,配置界面中可 ...
- Vue.js学习笔记(二)
Vue.js不支持IE8及以下的版本,因为vue使用了IE8无法模拟的ECMAScript5的特性,它支持所有兼容ECMAScript5的浏览器. <!DOCTYPE html> < ...
- poj 1961 Period
Period http://poj.org/problem?id=1961 Time Limit: 3000MS Memory Limit: 30000K Description Fo ...
- 阮一峰:自适应网页设计(Responsive Web Design)别名(响应式web设计)
随着3G的普及,越来越多的人使用手机上网. 移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页? 手机的屏幕比较小,宽度通 ...
- 基于bootstrup treeview多级列表树插件
<!doctype html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- HDU 2571 命运 (入门dp)
题目链接 题意:二维矩阵,左上角为起点,右下角为终点,如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) ,其中k>1.问最大路径和. 题解:入门dp,注意负 ...