-
Notifications
You must be signed in to change notification settings - Fork 1.1k
JSE介绍与集成指南
__名词解释: __
-
JSE: JavaScript Engine
的缩写简称
JSE运行在主任务(main task
)中,以单任务方式__顺序解析执行__,事件通知或回调必须在主任务中调用,即C call JavaScript
不能多任务中并行调用,只能在主任务中串行调用。
-
顺序解析执行
以下面sample为例,JSE在执行到
var c = add(1,2)
时会出错,因为add
这个函数在JSE的符号表中找不到(在addon中也找不到该函数,非本地扩展函数)。
var c = add(1,2);
function add(a,b)
{
return a+b;
}
正确写法如下
JSE在执行到function add(a,b)
时把该函数的内容记录在符号表中,执行至var c = add(1,2)
时会从符号表中找add
函数,找到之后再解析执行add
函数,并把返回值赋给c
。
function add(a,b)
{
return a+b;
}
var c = add(1,2);
-
符号表(
be_jse_symbol_t
) JSE解析JavaScript时把所有JS对象都会记录保持在符号表中,每个符号表的两中重要标识,一个是refs
引用计数,与作用域有关,还有一个是locks
锁定计数,一般与函数使用有关,在函数中使用时+1,不再使用时-1,只有当引用计数和锁定计数都为0
时,回收该对象,释放该符号表。符号表的基本类型主要有:NULL
,字符串
,数组
,对象
,函数
,整数
,浮点数
,对象名称
,本地扩展对象
举例var a=5
说明, 在符号表数组中,a
是对象名称,5
一个整数类型的值。
- 符号表容量定制 当前支持两种方法:
- 固定大小
#undef RESIZABLE_JSE_SYMBOL_TABLE
#define BE_JSE_SYMBOL_TABLE_SIZE 1000
-
可动态分配 (推荐)
初始大小
BE_JSE_SYMBOL_TABLE_BLOCK_SIZE
个符号表,不够时再分配BE_JSE_SYMBOL_TABLE_BLOCK_SIZE
个
#define RESIZABLE_JSE_SYMBOL_TABLE 1
#define BE_JSE_SYMBOL_TABLE_BLOCK_SIZE 512
#define BE_JSE_SYMBOL_TABLE_BLOCK_SHIFT 9
-
声明变量/常量时,表达式命名最长为63个字符
限制地方:
#define MAX_TOKEN_LENGTH 64
若token值超过63,词法分析会出错,会打印"Token name is too long"
但是String类型的值的长度并没有限制
0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef567899
该常量长度大于64, 不正确name0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef567899
该变量长度大于64, 不正确
var count = 1;
var name = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef567899'
var name0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef567899 = 1
-
定义函数原型时,函数参数名称不要超过8byte
限制地方:
#define BE_JSE_SYMBOL_DATA_STRING_LEN 8
函数参数名称parama
, 长度为6Byte, 正常parambbbb
长度大于8, 不正确
function add(parama, parambbbb)
{
...
}
在gravity_main.c
中使用, 头文件: be_jse_api.h
BoneEngine初始化
注册自定义JS对象Native扩展方法及属性的实现函数 必须在bone_engine_init之后调用 建议: 使用该函数扩展全局函数
用户注册自定义JS对象__moduleName__, 注册该对象的扩展方法及属性的实现函数__extension__ 必须在bone_engine_init之后调用 建议: 使用该函数扩展自定义对象
运行JS程序(完整语法块),可以多次调用
重新运行JS程序, JSE的符号表会重新初始化
退出BoneEngine
获取当前BoneEngine引擎的executor对象
注册load module函数,用于js requre
操作,根据模块名返回模块内容
| Home | Tutorial | Hardware | Porting Guide | Utilities | API Reference | Technical Docs | Certification |
Crafted with ❤️ by AliOS Things Team.