这里主要是JS的基础知识,也是深入理解Ext的基础。
1.参数可变长,注意跟Java还是有一点区别的。
例:

view source print?
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属性获取实际传递的参数数组。
例:

view source print?
1.function getUser(){
2.var args = arguments;
3.alert(args.length);
4.alert(args[0]);
5.}

3.js函数不能重载.因为,JS函数的参数是可变长的,从代码意义上来说就没有重载。另外,JS是一种解释执行的语言,浏览器脚本引擎开始载入JS代码的时候,必须先“扫描”然后才开始解释执行。在这个过程中,有一个重要的操作就是“标识符解析”,要求同一命名空间不允许同名变量的存在,包括函数名。
例:

view source print?
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中则需要我们一层一层的定义。

view source print?
1.var edu = {};
2.var edu.ouc = {};
3.var edu.ouc.wy = {};

5.JS支持函数嵌套
例:

view source print?
1.function outerFn(){
2.function innerFn(){
3.alert("innerFn test..");
4.}
5.alert("outerFn test...");
6.}
7.outerFn();  // 结果弹出来两个窗口

6.既然有了函数嵌套,我们就有从outerFn外部调用innerFn函数的需求
例:

view source print?
1.function outerFn(){
2.function innerFn(){
3.alert("innerFn test..");
4.}
5.return innerFn();
6.}
7.var cacheFn = outerFn();
8.cacheFn();

一般来说,“外层”作用域中的代码是无法访问“内层”作用域的。但是通过return一个函数的方式,可以让函数“穿越”作用域的限制,从而让外层作用域能够“触摸”到“内层”的函数和变量。
例:

view source print?
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中函数既是数据
例:

view source print?
1.function testFn(){
2.alert("test function..");
3.}
4.alert(testFn); // 显示的结果和上面这三行是一样的

例:

view source print?
1.testFn = function(){
2.alert("test function..");
3.}
4.alert(testFn); // 效果和上一个例子是一样的

两者的不同是:前者直接声明了一个函数,在脚本引擎的解析期间,这个函数就会被创建。
而后者相当于是定义了一个变量,因此只有在脚本真正执行到这一行的时候,函数才会被构建出来。
8.函数作为对象的属性,动态的添加和删除
例:

view source print?
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:

view source print?
1.var testFn = new Function('name','alert(my func...)');
2.testFn();  // 结果 my func...

Function:可以接受任意多个参数,只有最后一个参数被当做“函数体”。使用new Function()方式创建的函数,是在运行时才创建。并且他的作用域是“顶级作用域”,即window
例:

view source print?
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:

view source print?
1.var myFn = function(){}
2.myFn.name = "cat";
3.alert(myFn.name); // cat
4.delete myFn.name;
5.alert(myFn.name); // 空

10.三种特殊形式的函数调用:call,apply,()
例:

view source print?
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的第二个参数是数组。
例:

view source print?
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:

view source print?
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:

view source print?
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:

view source print?
1.function worker(){
2.alert(worker.caller); // 将会输出boss函数的代码,因为没有给他加(),
3.// 否则将报错too much recursion
4.}
5.function boss(){
6.worker();
7.}
8.boss();
原文链接:http://extjs.org.cn/node/585

Extjs 基础篇—— Function基础相关推荐

  1. java基础篇_java基础篇1

    JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...

  2. 【谷粒商城基础篇】基础环境搭建

    谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== 项目简介与分布式概念(第一.二章) 基础环境搭建(第三章) ===整合SpringCloud=== 整合 ...

  3. java官网教程(基础篇)—— 基础的Java类 —— 基础 I / O

    目录 基本 Java 类 基础 I/O I/O流 字节流 字符流 缓冲流 扫描和格式化 扫描 格式化 从命令行中进行IO操作 数据流 对象流 文件 I/O(采用 NIO.2) 什么是路径? Path类 ...

  4. MYSQL 基础篇 | 02-MYSQL基础应用

    文章目录 1 MySQL概述 2 SQL 2.1 SQL通用语法 2.2 SQL分类 2.3 DDL 2.3.1 数据库操作 2.3.2 表操作 2.4 DML 2.4.1 添加数据 2.4.2 修改 ...

  5. php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制

    知识点: 一 . 基础函数(数学 日期 字符串) 二 . php循环流程控制 一 . 基础 函数(数学 日期 字符串) 函数 : 执行某项功能的特定代码. sin()  cos() 数学中 sin(3 ...

  6. 基础篇——HTML基础 一

    HTML基础 标签语义化 h 和 p标签 bui 和 小伙伴 img图片标签 链接 表单 标签语义化 在合适的地方使用合适的标签:该放p时就放p 为什么要标签语义化:因为浏览器只认识标签,没有语音语调 ...

  7. 鸟哥的Linux私房菜(基础篇)- 一些基础的Linux 问题

    一些基礎的Linux問題 最近更新日期:2005/05/23 一些基礎的 Linux 問題與討論: 注意:如果您有更好的試題,或者是有相關的資料要提供給VBird 的話,我也會盡快的將他寫到網頁中的! ...

  8. Python学习之路基础篇--10Python基础,函数进阶

    1 命名空间 对于Python 来说命名空间一共有三种 1 内置命名空间 -- Python 解释器 就是Python 解释器一启动就可以使用的名字,储存在内置命名空间中.内置的名字在启动解释器的时候 ...

  9. 【Unity|C#】基础篇(1)——基础入门

    [学习资料] <C#图解教程>(第2~12章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baid ...

最新文章

  1. 如何理解依赖注入(DI)
  2. python爬虫框架排行榜-Python爬虫框架--pyspider初体验
  3. android 首选项框架,Android:创建自定义首选项
  4. 抓wifi包工具linux,测试工具之在Ubuntu使用Wireshark抓无线数据包
  5. 用 div 仿写 input 和 textarea 功能
  6. 微软 HoloLens 2 的幕后故事
  7. 移动视频监控摄像机分类与优势浅析
  8. NSOJ 一个人的旅行(图论)
  9. 链接link使用href=“#”和href=##的区别
  10. Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调试体系
  11. 福昕高级pdf编辑器10企业版 v10.1.0中文直装版
  12. 安全视角下的CAN协议分析
  13. 阿里P9告诉你:P6-P10到底啥区别,别再傻傻分不清?怎样才能打怪晋级?
  14. 大数据实时处理:百分点实时计算架构和算法
  15. 会放弃的人生才会更洒脱
  16. android小说模式,傲游Android版预读模式让手机小说控大饱眼福
  17. 如何提高心理承受能力?
  18. 什么是BGP多线,与普通双线的区别
  19. Centos安装Docker
  20. PDF文件破解打开密码

热门文章

  1. 根据“坐标”生成趋势图
  2. IOS的钥匙串,确保本地隐私数据的安全
  3. Android游戏开发基础part2--Canvas画布
  4. 如何在Terminal命令行模式下运行Objective-C
  5. hibernate join fetch
  6. 用C#实现抽象工厂模式
  7. 【OpenCV 】反向投影
  8. MATLAB【九】————ICP算法实现
  9. scanf()函数的用法和实践
  10. 关于Dreamweaver乱码问题的解决方案