当前位置: 首页 > news >正文

js词法分析2

<script type="text/javascript">

// 函数声明,与函数表达式
/*
JS被称为披着C外衣的Lisp语言, 
lisp是一种强大的函数式语言

函数可以赋值给变量,可以作为参数来传递.
*/

function t1() {
}

t2 = function() {
}

// 这2种方式,效果不同的,
// t1是函数声明, 虽然全局内也得到一个t1变量,值是function
// 而t2 只是一个赋值过程------值是谁? 值是右侧的表达式的返回结果,即函数



// 就是说 function () {} 在js看来,就和 3*2, 6/3 一样,是个表达式,返回一个结果

// 因此,t1 t2 两种方式在词法分析时,有着本质区别
// 前者 在词法分析阶段,就发挥作用
// 而后者,在运行阶段,才发挥作用



// 知道了函数表达式的概念,再看看一个你以前看不懂的东西
(function(window,undefined) {
})(window);

这是jquery的最外层代码

/*
(function(window,undefined){})  // 内层表达式,返回值是函数,包在小括号里,当成表达式来执行\
(function(window,undefined){})(window) // 立即调用

// 而内层函数又没有起名字,称为匿名函数,
// 这种手法,匿名函数,立即执行,不污染全局.   称为 立即执行匿名函数表达式

*/

// 思路: 为什么传window, 而又不会传undefined?
/*
答: 传window是为了速度

function() {
    function() {
        function () {
            function () {
                function () {
                    document.getElementById... // 这个document将会尚作用域层层上找,直到最外层
                }
            }
        }
    }
}


jquery就是为了加快内部查找变局变量的速度, 而直接把window以参数形式传进来
这样 window 就在jquery内部的 AO上



不传undefined是为了安全
因为在IE,FF低版本中 ,  undefined竟然可以重新赋值 ,如 undefined = 3;


声明undefined局部变量(名字是undefined而已), 同时,又不传参,值自然是undefined
防止了外界对undefined的污染

*/







</script>

 

转载于:https://www.cnblogs.com/a2762/p/4127110.html

相关文章:

  • [LeetCode] Merge Two Sorted Lists
  • telnet测试端口号
  • 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
  • DateTime.ToString格式化日期,使用DateDiff方法获取日期时间的间隔数
  • EasyMock的使用
  • dssfsfsfs
  • Android应用程序资源的查找过程分析
  • C++中正确使用PRId64 (转载)
  • 一些变量(39~62)
  • [转]Java学习日记之 volatile
  • beta 分布的简单理解
  • 二. Weinre 调试 IOS Hybrid APP
  • careercup-C和C++ 13.10
  • 冬吴相对论锦言佳句--0005.薄伽梵歌与“印度式管理”
  • 实用脚本 4 -- Makefile(不同文件下的多个可执行文件or静态库编译到同一目录下)...
  • create-react-app项目添加less配置
  • C学习-枚举(九)
  • Fabric架构演变之路
  • HTML5新特性总结
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python_网络编程
  • SpringBoot 实战 (三) | 配置文件详解
  • vue的全局变量和全局拦截请求器
  • Vue实战(四)登录/注册页的实现
  • 大主子表关联的性能优化方法
  • 动态规划入门(以爬楼梯为例)
  • 浮现式设计
  • 记一次和乔布斯合作最难忘的经历
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 区块链分支循环
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 微服务入门【系列视频课程】
  • 微信小程序实战练习(仿五洲到家微信版)
  • 新手搭建网站的主要流程
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 回归生活:清理微信公众号
  • ​2020 年大前端技术趋势解读
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # Maven错误Error executing Maven
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (南京观海微电子)——I3C协议介绍
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET企业级应用架构设计系列之结尾篇
  • /proc/vmstat 详解
  • @取消转义