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: dog
7.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);
// cat
4.
delete
myFn.name;
5.
alert(myFn.name);
// 空
10.三种特殊形式的函数调用:call,apply,()
例:
1.
function
myFn(){
2.
alert(
this
.name);
3.
}
4.
myFn.call({name:
"cat"
});
// 结果为cat
5.
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 recursion
4.
}
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 ...
随机推荐
- 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告
P3190 [HNOI2007]神奇游乐园 Description 给你一个 \(m * n\) 的矩阵,每个矩阵内有个权值\(V(i,j)\) (可能为负数),要求找一条回路,使得每个点最多经过一次 ...
- 关于Powershell对抗安全软件(转)
Windows PowerShell的强大,并且内置,在渗透过程中,也让渗透变得更加有趣.而安全软件的对抗查杀也逐渐开始针对powershell的一切行为.在https://technet.micro ...
- Compile、Make和Build的区别(as make, build, clean, run)
Compile.Make和Build的区别 - 熔 岩 - 51CTO技术博客 http://lavasoft.blog.51cto.com/62575/436216/ 针对Java的开发工具,一般都 ...
- RF - 完整用例展示
将重复性动作进行封装为keyword,在测试用例中调用keyword. *** Settings *** Documentation Simple example using SeleniumLibr ...
- git "refusing to merge unrelated histories" 解决方法
出现这个错误是因为本地的 git 历史和远程仓库的 git 历史不一样,如果我们想要合并两个不同的 git 历史(我们必须要清楚我们在做什么),就可以使用这个选项来进行强制合并不同的 git 历史,如 ...
- GO_09:GO语言基础之reflect反射
反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反 ...
- Docker生产实践(六)
镜像构建思路 思路:分层设计 最底层:系统层,构建自己适用的不同操作系统镜像: 中间层:根据运行环境,如php.java.python等,构建业务基础运行环境层镜像: 最上层:根据具体的业务模块,构建 ...
- 使用SSH-Xsheel文件传输
借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 使用命令前需要 apt-get install lrzsz 如果提示源找不到 ...
- Ubuntu如何同步网络时间
解决方法: 1.安装ntpdate工具 apt-get install ntpdate 2.将系统时间与网络同步 ntpdate cn.pool.ntp.org 3.将时间写入硬件 hwclock - ...
- Shell记录-Shell命令(文件权限)
chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. 1. 命令格式 ch ...