JavaScript | 基础(变量/引用/转换/函数)
————————————————————————————————————————————
变量
- 全局变量:在函数体外声明,全局可以使用
- 局部变量:通过关键字var来声明
变量类型
<script type="text/javascript">
var a;
// 十进制
a = 1;
a = 1.2;
a = -23;
a = .23e4;
a = 3e-2;
// 十六进制
a = 0xABCDE;
a = 0Xff;
// 八进制
a = 0123;
a = 01234567;
// 正负无穷大
a = 1.79e310;
a = -1.79e310;
// NaN:不是一个数字
// p.s.NaN不能和自身比较,NaN!=NaN
a = 0 / 0;
// alert(a);
// alert(isNaN(a));
var str1 = "hello";
var str2 = "world";
var str = str1 + str2;
// 转义字符,如果定界符用',内部是可以用"的
var strCh = 'a\nb\rc\t"d\\';
// alert(strCh);
// 赋不存在的值
var emptyValue;
// alert(emptyValue);
// 赋空置
var nullValue = null;
alert(nullValue);
</script>
在内存中的存储与释放(无用存储单元)
- 收集方式:自动进行收集,可以创建任何需要的无用对象,系统会自动进行清除
- 收集内容:收集器确定安全回收内存单元的时机,回收那些不再会被使用的值
- 回收算法:标记和清除无用存储单元的回收算法,通过回收器周期性遍历所有变量并且给变量所引用的值做标记,如果被引用的值是对象或数组,那么会以递归的形式做标记,如果值是数或图,回收器会找到对应的值。如果没有找到对应的值,则通过回收算法来回收。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
引用JS
<!DOCTYPE html>
<html> <head>
<!-- 调用外部文件 -->
<script type="text/javascript" src="./test.js"></script>
<!-- 使用代码屏蔽 -->
<script type="text/javascript">
<!--
alert("浏览器支持js,如果不支持则不显示该内容");
// 向控制台书写内容
console.log("hello");
//-->
</script>
<!-- 在浏览器不支持js时显示该行字 -->
<noscript>
您的浏览器不支持js,建议更换高版本的浏览器以保证您的用户体验
</noscript>
</head> <body>
<!-- 写在href中的js -->
<p><a href="javascript:confirm('您确定么?')">报名</a></p>
<!-- 写在onclick中的js -->
<p onclick="javascript:alert('onclick')">点击</p>
</body> </html>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
隐式转换

显式转换

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数调用的arguments的方法
<script type="text/javascript">
// arguments数据类型是一个数组,可以得到我们传入的参数
function calc(x, y) {
alert(arguments[0]);
alert(arguments[1]);
alert(typeof arguments);
}
// alert(1, 2); // 通过arguments.length获取参数的个数
// 在这里调用的实参有5个,函数形参有4个,自动忽略一个,但arguments.lenth为5
// 通过arguments实现可变参数
function test(a, b, c, d) {
arguments[2] = 100;
var paramsNum = arguments.length;
var sum = 0;
for (var i = arguments.length - 1; i >= 0; i--) {
sum += arguments[i];
}
alert(sum);
}
test(1, 2, 3, 4, 5, 6);
</script>
————————————————————————————————————————————
函数
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
全局函数:见手册

- 代码样例
<script type="text/javascript">
/***********************************
* encodeURI()
* decodeURI()
* encodeURIComponent()
* decodeURIComponent()
***********************************/
// encodeURIComponent 在转义时会将整个URI中的所有标点符号都转义,包括分隔符/
var str = "http://www.hughdong.com/Hugh Dong,/";
document.write(encodeURI(str) + "</br>");
document.write(encodeURIComponent(str) + "</br>");
// decodeURI 无法完全解开encodeURIComponent的编码,需要对应decodeURIComponent来就解码
document.write(decodeURI(encodeURIComponent(str)) + "</br>");
document.write(decodeURIComponent(encodeURIComponent(str)) + "</br>");
document.write("<hr>")
/***********************************
* escape()
* unescape()
***********************************/
// 对字符进行转义
str = "(?!=()#%&))";
document.write(escape(str) + "</br>");
document.write(unescape(escape(str)) + "</br>");
document.write("<hr>")
/***********************************
* eval()
***********************************/
// 计算某个字符串,并执行其中的JavaScript代码
eval("document.write('eval() is called')");
document.write("<hr>")
/***********************************
* getClass(javaobj)
* 未理解,略
***********************************/
document.write("<hr>")
/***********************************
* isFinite()
* isNan()
***********************************/
// isFinite 判断不是无穷大时true
document.write(isFinite(1.79e390) + "</br>")
document.write(isFinite(-1.79e390) + "</br>")
document.write(isFinite(2) + "</br>")
// isNaN 判断不是数字时true
document.write(isNaN("hello") + "</br>")
document.write(isNaN(1.79e390) + "</br>")
document.write("<hr>")
/***********************************
* Number()
* parseFloat()
* parseInt()
* String
* 数据类型转换,略
***********************************/
document.write("<hr>")
</script>
- 实现效果

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
匿名函数:没有函数名的函数
- 函数表达式可以存储在变量中,变量也可以作为一个函数使用
- 可以将匿名函数作为参数传递给其他函数,接收方函数就可以通过所传递进来的函数完成某些功能
- 可以通过匿名函数来执行某些一次性的任务
回调函数:将函数的返回值作为参数调用来实现功能
- 回调函数调用的函数
- call()
- apply()
- 可以让我们在不做命名的情况下传递参数,这样可以节省全局变量
- 我们可以讲一个函数调用操作委托给另一个函数,节省代码编写
- 有助于提升性能
自调函数:不需要调用,自动执行的函数
- 使用自调函数不会产生任何全局变量
- 函数无法重复执行,适合执行一些一次性或初始化的任务
内部(私有)函数
- 确保全局名字空间的纯净性,防止命名出现冲突
- 只将一些必要的函数暴露给外部,并保留属于自己的函数,使其不被其他应用程序所调用
返回函数的函数
闭包(作用域链)
var Test = function Calc(a, b)
{
return a + b;
}
document.write(Test(1, 2) + "</br>");
var Test1 = Test;
document.write(Test1(1, 2) + "</br>");
/*******************************
* 匿名函数,没有函数名
*******************************/
var Test2 = function (x, y)
{
return x * y;
}
var Test3 = Test2;
document.write(Test2(3, 4) + "</br>");
document.write(Test3(4, 5) + "</br>");
/*******************************
* 回调函数(匿名函数的应用)
*******************************/
// Demo1
// 通过Calc2调用T1和T2函数
function Calc2(x, y)
{
return x() + y();
}
function T1()
{
return 5;
}
function T2()
{
return 6;
}
document.write(Calc2(T1, T2) + "</br>");
// Demo2
// 调用Func1,在for循环中将abc的值先*2传入CallBack函数AddOne,将返回值存入arr数组并打印
function Func1(a, b, c, CallBack)
{
var i,
arr = [];
for (i = 0; i < 3; i++)
{
arr[i] = CallBack(arguments[i] * 2);
}
return arr;
}
function AddOne(num)
{
return num + 1;
}
document.write(Func1(3, 4, 5, AddOne) + "</br>");
// Demo3
// 或者使用匿名函数作为回调函数,同Demo2
function Func2(a, b, c, CallBack)
{
var i,
arr = [];
for (i = 0; i < 3; i++)
{
arr[i] = CallBack(arguments[i] * 2);
}
return arr;
}
document.write(Func2(5, 6, 7, function (a)
{
return a + 1
}
) + "</br>");
// Demo4
// 使用系统的call()方法
function Func4(a, b, c)
{
return a * b * c;
}
document.write(Func4.call(this, 2, 2, 2) + "</br>");
// Demo5
// apply()方法
function Func5(a, b, c)
{
return a + b + c;
}
var params = [4, 5, 9]
document.write(Func5.apply(this, params) + "</br>");
/*******************************
* 自调函数
*******************************/
(function (a, b)
{
document.write("函数自调用" + a + b);
}
)(3, 5); // 内部私有函数
// 在内部封装不想让外部使用的代码
function a(param)
{
function b(param1)
{
return param1 + 10;
}
// 在a函数体内调用b函数
return b(param);
}
// 在a函数体外不能直接调用b函数
console.log(a(5)); // 返回函数的函数
function c()
{
console.log('111');
return function ()
{
console.log('222');
}
}
// 在这里不可以直接调用c(),需要声明变量funcTest,让c()的返回值返回给funcTest
var funcTest = c();
funcTest();
// 或使用另一种形式c()();
c()(); // 重写自己的函数,用新的函数覆盖自己
function d()
{
console.log('333');
d = function ()
{
console.log('444');
}
}
// 在d函数内将新的函数内容赋给自己,第一次调用时为333并将自己重写自己的函数
console.log(d);
d();
console.log(d);
d(); // 针对不同的浏览器执行不同的代码
var e = function ()
{
function setUp()
{
console.log('setup');
} function doWhat()
{
console.log('dowhat');
}
setUp();
return doWhat;
}
();
// 打印e()代码段可以看到e的内容是doWhat(),在function(){}()末尾的()代表执行,e得到了function()返回的doWhat
console.log(e);
e();

JavaScript | 基础(变量/引用/转换/函数)的更多相关文章
- JavaScript基础:字符串转换函数——String()和toString()
1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 例如将false转为字符串类型 <script> var str = false ...
- php引用(&)变量引用,函数引用,对象引用和参数引用用法
php引用(&)变量引用,函数引用,对象引用和参数引用用法 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语 ...
- JavaScript 基础 (变量声明, 数据类型, 控制语句)
创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...
- 前端知识体系:JavaScript基础-变量和类型
前端工程师自检清单 1. JavaScript规定了几种语言类型 2. JavaScript对象的底层数据结构是什么 3. Symbol类型在实际开发中的应用.可手动实现一个简单的 Symbo 4. ...
- 【javascript基础】2、函数
前言 我在上一篇[javascript基础]基本概念中介绍了javascript的一些基本概念,多谢大家的阅读和意见,自己写的东西可以被大家阅读,真心高兴,刚开始发布的时候我一直盯着阅读人数,虽然知道 ...
- JavaScript基础——变量、语句、注释
一.变量的命名规则 1.变量名由数字.字母.下划线组成 2.变量名的首字母不能是数字,只能是字母或者下划线 3.不能使用关键字和保留字作为变量名 4.变量严格区分大小写,例如在JavaScript中o ...
- JavaScript:变量提升和函数提升
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...
- 【javaScript基础】马上调用函数表达式
在javaScript中,每一个函数被调用时,都会创建一个新的运行上下文.由于在一个函数里面定义的变量和函数仅仅能在里面訪问.在外面是不行的.上下文提供了一种非常easy的方法来创建私有性. //ma ...
- JavaScript基础内容中的函数详解
函数 函数:即方法 函数就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值. 为什么使用函数: 1.方便调用 2.代码重用,利于维护 3.便于修改,便于重构 4.简化逻辑,利 ...
随机推荐
- Jquery实现全选和取消全选的方法
<input type="checkbox" id="all" />全选<br /> <input type="chec ...
- 数据排序 第三讲( 各种排序方法 结合noi题库1.10)
说了那么多种排序方法了,下面就来先做几个题吧 06:整数奇偶排序 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定10个整数的序列,要求对其重新排序.排序 ...
- 前端设计师必须知道的10个重要的CSS技巧
对于一个初入门的前端设计师,在设计修改网站前端的时候,我们需要编写一些CSS.JS的内容达到界面效果.今天分享10个对于前端设计师来说重要的CSS技巧,这也是我在给许多客户做网站的过程当中总结出来的. ...
- HDOJ 5693 D Game
众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它发明了一个游戏:D游戏. 度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只是代指等差数列[(等差数列百科)](http://baik ...
- POJ 3608 Bridge Across Islands (旋转卡壳)
[题目链接] http://poj.org/problem?id=3608 [题目大意] 求出两个凸包之间的最短距离 [题解] 我们先找到一个凸包的上顶点和一个凸包的下定点,以这两个点为起点向下一个点 ...
- Java多线程——锁概念与锁优化
为了性能与使用的场景,Java实现锁的方式有非常多.而关于锁主要的实现包含synchronized关键字.AQS框架下的锁,其中的实现都离不开以下的策略. 悲观锁与乐观锁 乐观锁.乐观的想法,认为并发 ...
- 微信小程序API·目录
网络 媒体 文件 数据缓存 位置 设备 界面 第三方平台 开放接口 数据 更新 多线程 监控 调试接口 日志
- ueditor-angular(百度编辑器angular版)中,关于插入图片后不操作,图片无法正常提交的问题;
由于项目后台管理页面中需要使用编辑器,所以选择了百度编辑器这个常用的东西: 本人是小白,第一次使用百度编辑器,具体的配置是由后台的兄弟完成的,还给了demo,所以在项目开发中也一直都没发现什么问题: ...
- SVN安装中遇到的问题
新的版本:1.9.5 必须使用Apache Portable Runtime Utility 1.5.4 Released没有安装的话需要先安装 需要安装apr.apr-util sqlite zli ...
- wpf一些例子
相关知识点:WPF - Adorner WPF Diagram Designer http://www.codeproject.com/Articles/484616/MVVM-Diagram-Des ...