关于js 中函数的参数
var a = 100;
function test(a){
a++; //a(形参)是局部变量
console.log(a);
}
test(a);
console.log(a); //结果是 101 100;
函数的参数是属于函数内部变量,外部无法访问到,即使与外部变量同名;它们也是两个不同的变量
类似于:
var a = 100;
function test( ){
var a=100; //a是局部变量
a++;
console.log(a);
}
test( );
console.log(a); //结果 101 100;
*****************************************************
当函数没有定义参数或者内部没有var 变量,内部的变量默认为全局变量;例如:
var a = 100;
function test( ){
a++ ;
console.log(a);
}
test( );
console.log(a); //第一个返回101;第二个101;a是全局变量
******************************************************
当函数定义了参数,没有传实参时,形参默认为undefined:
var a = 100;
function test(a){
a++ ;
console.log(a);
}
test( );
console.log(a); //第一个返回undefined;第二个100;
**************************************************************
但是如果是通过对象传递参数,函数内部对象属性值发生改变,外部被传递对象的属性值也会改变;
var a= {x:100};
function test (a){
a.x++; //修改参数对象a.x的值,函数外定义的a也将会被修改
console.log(a.x);
}
test(a);
console.log(a.x); // //第一个返回101;第二个101;
总结:通过值传递参数时
在函数中调用的参数是函数参数(属于局部变量范畴).如果函数修改参数值,将不会改变外部被引用的实参值;
通过对象传递参数时
对象属性的变量是相当于一个指针,因此函数修改对象的属性值时,外部的对象属性值也会改变
这也是涉及到基本类型和引用类型的值;基本数据类型(undefined,null,boolean,Number)是按值访问的,所以局部变量与全局变量即使两个名字一样,也是两个不同的变量;
总之 第一、函数参数是被当作变量对待的;第二、参数是按值传递的;第三、传递参数时要确定传递的数据类型;
对象属于引用类型,当变量是一个对象时,将这个变量赋给另一个变量时,相当于另一个变量也变为指针;两个变量都指向同一对象;所以在引用数据类型中,变量相当于一个指针;
(注:javascript高级程序设计第四章 变量、作用域和内存 有详解介绍);
关于js 中函数的参数的更多相关文章
- js中函数的参数为函数的情况即回调函数
js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...
- JS中函数参数和函数返回值的理解
函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...
- JS中URL编码参数(UrlEncode)
JS中URL编码参数(UrlEncode) 网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的 ...
- 关于js中函数的调用问题
js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...
- js中函数传参的情况
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 对JS中函数的理解
函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...
- 如何理解javaSript中函数的参数是按值传递
本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...
- 【2017-06-27】Js中获取地址栏参数、Js中字符串截取
一.Js中获取地址栏参数 //从地址栏获取想要的参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" ...
- JS中函数void()
<a href="javascript:void(0)">hello</a>/* * JS中函数void()的运用大体是这种新式; * void()是运算符 ...
随机推荐
- 三种timer控件的简单实例
.system.windows.forms .system.threading.timer .system.timers.timer using System; using System.Collec ...
- 基于JsonPath和XmlPath的对象映射(Object Mapping)
rest-assured支持映射Java对象到Json和XML以及从Json和XML中映射到Java对象.Json映射需要在classpath 中有Jackson.Jackson 2或者是Gson,X ...
- 洛谷 P4280 bzoj1786 [AHOI2008]逆序对(dp)
题面 luogu bzoj 题目大意: 给你一个长度为\(n\)的序列,元素都在\(1-k\)之间,有些是\(-1\),让你把\(-1\)也变成\(1-k\)之间的数,使得逆序对最多,求逆序对最少是多 ...
- Luogu P1273 有线电视网 树形DP
又重构了一下...当然当初的题一看就看懂了QAQ 设f[i][j]表示以i为根的子树,有j个客户的最大收益 方程:f[u][j+k]=max(f[u][j+k],f[u][j]+f[v][k]-w(u ...
- A. Little C Loves 3 I Codeforces Round #511 (Div. 2) 【数学】
题目: Little C loves number «3» very much. He loves all things about it. Now he has a positive integer ...
- POJ - 3261 后缀数组 height应用
题意:求最少重叠\(k\)次的重复子串的最大长度 子串长度问题依然是二分枚举,可以观察出重叠的一定是sa排序中连续的 之前想出一种判断要\(n^2\)的方法,没有考虑到后面肯定会连续出现的情况 (大概 ...
- 不要重复发明轮子-C++STL
闫常友 著. 中国铁道出版社. 2013/5 标准的C++模板库,是算法和其他一些标准组件的集合. . 1.类模板简介 2.c++中的字符串 3.容器 4.c++中的算法 5.迭代器 6.STL 数值 ...
- .Net支持Redis哨兵模式
csredis 博客 csRedisgit地址 csRedis3.2.1 Nuget地址 (在使用csredis3.2.1获取sentinel时产生运行时异常,调查问题最后发现是获取sentinel的 ...
- hibernate实现学生-课程-成绩
1.实体类Student package com.test.model; import javax.persistence.Entity; import javax.persistence.Gener ...
- centos 7 ssh登录安全问题
2018-10-11 1.ssh禁止root远程登录 修改ssh配置文件/etc/ssh/sshd_config vim /etc/ssh/sshd_config PermitRootLogin ye ...